热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

大数据江湖之即席查询与分析(下篇)--手把手教你搭建即席查询与分析Demo

上篇小弟分享了几个“即席查询与分析”的典型案例,引起了不少共鸣,好多小伙伴迫不及待地追问我们:说好的“手把手教你搭建即席查询与分析Demo”啥时候能出?说到就得做到,差啥不能差人品,本篇只分享技
上篇小弟分享了几个“即席查询与分析”的典型案例,引起了不少共鸣,好多小伙伴迫不及待地追问我们:说好的“手把手教你搭建即席查询与分析Demo”啥时候能出?说到就得做到,差啥不能差人品,本篇只分享技术干货,目的只有一个,就是让每一个伙伴都能根据本篇向导搭建出一个“即席查询与分析Demo”。

        为了让各位伙伴能够尽快上手体验,所选案例就以上一篇中的“机动车缉查布控即席查询与分析”为例,上篇我们已经比较详尽的分析了用户需求,没好好听课的小伙伴赶紧把“大数据即席查询与分析(中篇)”再好好复习一下,这里不再赘述。需要特别强调是,为了尽量降低大家搭建Demo的门槛,主要是为了让大家充分了解到Demo搭建的过程;另外,请大家务必按照如下步骤严格执行,任何一个参数的问题都可能引起后续的问题。

 

一、原材料准备

硬件环境:大数据环境搭建,强烈建议使用物理机

如果实在没有条件,每个虚拟机配置不要低于4核,32G,否则严重影响效果。

本次Demo采用如下配置服务器3台

硬件配置项

详细信息

机器型号

IBM 3650 M3(某宝上2000大洋搞定)

CPU

2C*6核

内存

DDR3 64GB

数据盘

SAS盘 300G 6块裸盘挂载

Raid 配置

RAID 0

网卡

千兆网卡

交换机

TPLINK千兆普通交换机

软件环境:不必到处找了,下载地址:http://url.cn/42R4CG8

软件配置项

详细信息

操作系统

CentOS 6.6

hadoop版本

HDP 2.5

延云ydb版本

YDB 1.1.6

测试用例:

测试数据

详细信息

数据条数

1亿条

原始文本数据大小

5G

 

二、操作系统安装与配置

推荐安装Centos 6.5或6.6的操作系统(不要使用centos7哦),选择安装英文语言环境,安装桌面版(不要安装最简版)。

1.       配置机器名及hosts域名解析

规划三台机器为ydbmaster,ydbslave01, ydbslave02

在每台机器上按照相应名字修改:

hostname ydbmaster

vi /etc/sysconfig/network

vi /etc/hosts

切记hosts文件中 不要将localhost给注释掉,并且配置完毕后,执行下 hostname -f 看下 是否能识别出域名

2.       在每台机器上修改Ulimit配置

操作系统默认只能打开1024个文件,打开的文件超过这个数发现程序会有“too many open files”的错误,1024对于大数据系统来说显然是不够的,如果不设置,基本上整个大数据系统是“不可用的”,根本不能用于生产环境。

配置方法如下:

echo  "* soft    nofile  128000" >>/etc/security/limits.conf

echo  "* hard    nofile  128000" >>/etc/security/limits.conf

echo  "* soft    nproc  128000" >>/etc/security/limits.conf

echo  "* hard    nproc  128000" >>/etc/security/limits.conf

cat / etc /security/limits.conf

sed -i 's/1024/unlimited/'/etc/security/limits.d/90-nproc.conf

cat /etc/security/limits.d/90-nproc.conf

ulimit -SHn 128000

ulimit -SHu 128000

3.       在每台机器上一定要禁用Swap

       在10~20年前一台服务器的内存非常有限,64m~128m,所以通过Swap可以将磁盘的一部分空间用于内存。但是现今我们的服务器内存普遍达到了64G以上,内存已经不再那么稀缺,但是内存的读取速度与磁盘的读取相差倍数太大,如果我们某段程序使用的内存映射到了磁盘上,将会对程序的性能造成非常严重的影响,甚至导致整个服务的瘫痪。

       禁用方法如下,让操作系统尽量不使用swap:

echo  "vm.swappiness=1" >>/etc/sysctl.conf

sysctl -p

sysctl -a|grep swappiness

4.       在每台机器上修改网络配置优化

echo  " net.core.somaxcOnn= 32768 " >>/etc/sysctl.conf

sysctl –p

sysctl -a|grep somaxconn

5.       在每台机器上配置SSH无密码登录

安装 Hadoop与Ambari均需要无密码登录

设置方法请参考如下命令:

ssh-keygen

cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys

chmod 700 ~/.ssh

chmod 600 ~/.ssh/authorized_keys

ssh-copy-id root@ydbslave01

ssh-copy-id root@ydbslave02

…..

6.       在每台机器上关闭防火墙

iptables -P INPUT ACCEPT

iptables -P FORWARD ACCEPT

iptables -P OUTPUT ACCEPT

chkconfig iptables off

/etc/init.d/iptables stop

service iptables stop

iptables –F

7.       在每台机器上修改setenforce与Umask配置

setenforce设置:

setenforce 0

sed -i 's/enabled=1/enabled=0/' /etc/yum/pluginconf.d/refresh-packagekit.conf

cat /etc/yum/pluginconf.d/refresh-packagekit.conf

Umask设置:

umask 0022

echo umask 0022 >>/etc/profile

8.       在每台机器上修改检查/proc/sys/vm/overcommit_memory的配置值

如果为2,建议修改为0,否则有可能会出现,明明机器可用物理内存很多,但jvm确申请不了内存的情况。

9.       在每台机器上修改语言环境配置

先修改机器的语言环境

#vi /etc/sysconfig/i18n

LANG="en_US.UTF-8"
SUPPORTED="zh_CN.GB18030:zh_CN:zh:en_US.UTF-8:en_US:en"
SYSFOnT="latarcyrheb-sun16"

然后配置环境变量为utf8

echo "exportLANG="en_US.UTF-8 " >> ~/.bashrc

source ~/.bashrc

export|grep LANG

10.   配置时间同步

集群时间必须同步,不然会有严重问题

参考资料如下:http://www.linuxidc.com/Linux/2009-02/18313.htm

11.   环境变量

请大家千万不要在公共的环境变量配置Hadoop,Hive,Spark等环境变量,极可能产生相互冲突。

12.   请检查盘符,不要含有中文

尤其是ambari,有些时候,我们使用U盘或移动硬盘复制软件,但是这个移动硬盘挂载点是中文路径,这样在安装ambari的时候会出现问题,一定要注意这个问题.

13.   在每台机器上检查磁盘空间,使用率不得超过90%

默认Yarn会为每台机器保留10%的空间,如果剩余空间较少,Yarn就会停掉这些机器上的进程,并出现Containerreleased on a *lost* node错误。

14.   在每台机器上配置关键日志要定时清理,避免磁盘爆满

如可以编辑crontab -e每小时,清理一次日志,尤其是hadoop日志,特别占用磁盘空间

0 */1 * * * find/var/log/hadoop/hdfs -type f -mmin +1440 |grep -E "\.log\." |xargs rm–rf

 

三、Hadoop安装与配置

考虑到原版Hadoop安装配置门槛较高,本次我们使用Hortonworks公司的HDP、Ambari来搭建Hadoop环境。


从Hortonworks官方下载HDP与HDP-UTILS

http://public-repo-1.hortonworks.com/HDP/centos6/2.x/updates/2.5.0.0/HDP-2.5.0.0-centos6-rpm.tar.gz

http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.21/repos/centos6/HDP-UTILS-1.1.0.21-centos6.tar.gz

http://public-repo-1.hortonworks.com/ambari/centos6/2.x/updates/2.4.1.0/ambari-2.4.1.0-centos6.tar.gz


准备好系统安装盘.iso文件或者系统yum源

配置示例:

mkdir -p/opt/ydbsoftware/centosyum

mount -o loop/opt/ydbsoftware/CentOS-6.6-x86_64-bin-DVD1.iso /opt/ydbsoftware/centosyum

 

从http://url.cn/42R4CG8获取

  • 延云YDB
  • 延云优化过的Spark(原版Spark有很多bug哦,以后会写相关专题)
  • JDK1.8


解压spark1.6.3_hadoop2.7.3.tar.gz,解压ya100.1.x.x.zip

解压后一定要放在/opt/ydbsoftware目录下

注意观察,如下三个目录是否存在

/opt/ydbsoftware/spark1.6.3_hadoop2.7.3

/opt/ydbsoftware/jdk1.8.0_60

/opt/ydbsoftware/ya100/bin

 

1.       安装JDK

将安装包中的JDK安装到/opt/ydbsoftware/jdk1.8.0_60

分发到每台机器上,且路径统一为/opt/ydbsoftware/jdk1.8.0_60

2.       软件上传到服务器

确认将全部软件已经上传到/opt/ydbsoftware目录下,不能随意更改/opt/ydbsoftware路径。

3.       配置HTTP服务(在解压后的目录执行)

cd /opt/ydbsoftware

nohup python -m SimpleHTTPServer &

4.       配置YUM源

备份旧的YUM源

cd /etc/yum.repos.d

mkdir -p bak

mv *.repo bak/

 

配置ambari源与本地系统源,每台机器都要配置,ambari.repo文件名不得更改,本地系统源很重要,一定要配置

配置示例如下:

cat </etc/yum.repos.d/ambari.repo

[centoslocal]

name=centoslocal

baseurl=http://ydbmaster:8000/centosyum

gpgcheck=0

[AMBARI]

name=AMBARI

baseurl=http://ydbmaster:8000/AMBARI-2.4.1.0/centos6/2.4.1.0-22

gpgcheck=0

[HDP]

name=HDP

baseurl=http://ydbmaster:8000/HDP/centos6

gpgcheck=0

[HDP-UTILS]

name=HDP-UTILS

baseurl=http://ydbmaster:8000/HDP-UTILS-1.1.0.21/repos/centos6

gpgcheck=0

EOF

5.       安装与配置ambari-server(只需要在一台机器安装)

yum cleanall

yum makecache

yum repolist

yum installambari-server

6.       配置Ambari

ambari-server setup

除JDK需单独指定外,都默认


7.       启动ambari-server

ambari-server start

然后就可以打开http://xx.xx.xx.xx:8080 安装hadoop了

默认用户名与密码均为admin

8.       开始创建集群



9.       配置HDP源

选择HDP版本为HDP2.5



10.   部署的机器列表与登录私钥配置

 

11.   部署Ambari-Agent


如有警告,要注意处理

 

12.   选择安装部署服务

 

服务分配



13.   配置HDFS







14.    配置YARN


15.    配置MapReduce

 

16.    配置ZooKeeper



17.    AmbariMetrics 配置

 

18.    完成HDP部署







四、YDB安装与配置

1.       安装YDB

ln -s /opt/ydbsoftware/spark1.6.3_hadoop2.7.3/opt/ydbsoftware/spark

cd /opt/ydbsoftware/ya100/bin

sh ./hdp_install.sh

2.       通过Ambari配置YDB 





A配置:基本配置


B组配置:环境路径配置


C配置:存储相关路径配置


开始安装


安装完毕


检查YDB是否启动成功


在这里可以看到每台机器的健康状态,内存使用情况等,如果有异常这里会有提示,红色表示是比较严重的错误,紫色表示警告,其他颜色可以忽略。

正常没有错误的页面是这样的:


状态异常状态是这样的:

 

至此,基础环境已经搭建完毕,开始导入数据。

 

五、数据导入

1.       YDB自带伪造数据jar包,生成比较简单的本次Demo测试数据

hadoopfs -mkdir /data/example/jiaotong_txt/

hadoop jar./lib/ydb-1.1.6-pg.jar

cn.net.ycloud.ydb.server.reader.kafka.importexample.YdbJiaotong500000 /data/example/jiaotong_txt/1yi.txt


2.  链接JDBC客户端

sh bin/conn.sh

 

3.  创建HIVE外部表,并将伪造的txt文件导入HIVE表

hphm为号牌号码,kkbh为卡口编号,jgsj为经过时间,jgsk为经过时刻,quyu为卡口位置

create external tablejiaotong_txt(

hphm  string,

kkbh  bigint,

jgsj  bigint,

jgsk  bigint,

quyu  string

)

row format delimited fieldsterminated by ','

stored as

INPUTFORMAT'cn.net.ycloud.ydb.handle.YdbCombineInputFormat'OUTPUTFORMAT'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'

location'/data/example/jiaotong_txt'

TBLPROPERTIES('ydb.combine.input.format.raw.format'='org.apache.hadoop.mapred.TextInputFormat'

);

 

4.  创建YDB表,额外定义两列‘_str’的列,用于Groupby等操作,YDB中的分词数据类型不能Groupby


/*ydb.pushdown('->')*/

create table jiaotong_ydb(

hphm_str string,

hphm  chepai,

kkbh  tlong,

jgsj  tlong,

jgsk  tlong,

quyu_str  string,

quyu  simpletext

)

/*('<-')pushdown.ydb*/ ;


5.  向YDB表导入数据,本次测试机有其他测试在跑,导入时间不具备参考价值

insert overwrite tableydbpartion

select 'jiaotong_ydb', '1yi','',

YROW(

'hphm_str' , hphm ,

'hphm'     , hphm ,

'kkbh'     , kkbh ,

'jgsj'     , jgsj ,

'jgsk'     , jgsk ,

'quyu_str' , quyu ,

'quyu'     , quyu

)

from jiaotong_txt;

 

6.  验证YDB中的数据

成对的/*ydb.pushdown('->')*/,/*('<-')pushdown.ydb*/,是YDB特殊标识


/*ydb.pushdown('->')*/

selectcount(*) from jiaotong_ydb

whereydbpartion = '1yi'

/*('<-')pushdown.ydb*/;


/*ydb.pushdown('->')*/

selecthphm_str,hphm,kkbh,jgsj,jgsk,quyu_str,quyu from jiaotong_ydb

where ydbpartion = '1yi'order by jgsj desc limit 10

/*('<-')pushdown.ydb*/ ;

 


六、机动车缉查布控即席查询与分析的典型场景

以下典型场景在“大数据江湖之即席查询与分析(中篇)”中有过详细的讲解与分析,这里不再赘述,直接给出实现方法。

1.  重点/指定车辆行车轨迹即席查询与分析

with tmp as (

/*ydb.pushdown('->')*/

selecthphm,kkbh,jgsj,jgsk,quyu from jiaotong_ydb

where ydbpartion = '1yi' andhphm='广K66457' order by jgsj desc /*('<-')pushdown.ydb*/

)

select hphm, kkbh, jgsj,jgsk, quyu

from tmp order by jgsj desclimit 10;

 

2.  同行车辆即席查询与分析

with tmp as (

/*ydb.pushdown('->')*/

select hphm, jgsj, kkbh fromjiaotong_ydb

where  ydbpartion = '1yi' and

( (jgsj like '([201607200902TO 201607201102])' and kkbh=57230)

or (jgsj like '([201607200847TO 201607201047])' and kkbh=30895)

or (jgsj like '([201607200812TO 201607201012])' and kkbh=29479)  )

/*('<-')pushdown.ydb*/

)

select * from (

select tmp.hphm, count(*) asrows, size(collect_set(tmp.kkbh)) as dist_kkbh

, concat_ws('#',sort_array(collect_set(concat_ws(',',tmp.jgsj,tmp.kkbh)))) as detail

from tmp group by tmp.hphm )tmp2

where tmp2.dist_kkbh>=2order by dist_kkbh desc limit 10;

 

3.  区域碰撞分析

with tmp as (

/*ydb.pushdown('->')*/

select hphm,jgsj,quyu fromjiaotong_ydb

where ydbpartion = '1yi' and

( (jgsj like '([201607200902TO 201607201102])' and quyu='光华路汇统花园')

or (jgsj like '([201607200847TO 201607201047])' and quyu='东明路鑫兆雅园')

or (jgsj like '([201607200812TO 201607201012])' and quyu='川巷路城市月光')  )

/*('<-')pushdown.ydb*/

)

select

tmp.hphm, count(*) as rows,size(collect_set(tmp.quyu)) as dist_quyu, concat_ws('#',sort_array(collect_set(concat_ws(',',tmp.jgsj,tmp.quyu))))as detail

from tmp group by tmp.hphmorder by dist_quyu desc limit 10;

 

4.  昼伏夜出、落脚点分析

with tmp as (

/*ydb.pushdown('->')*/

select jgsk,jgsj,quyu fromjiaotong_ydb where ydbpartion = '1yi' and hphm='广K66457'

/*('<-')pushdown.ydb*/

)

select

tmp.jgsk, count(*) as rows,size(collect_set(tmp.quyu)) as dist_quyu, concat_ws('#',sort_array(collect_set(concat_ws(',',tmp.jgsj,tmp.quyu))))as detail

from tmp group by tmp.jgskorder by dist_quyu desc limit 10;

 

5.  陌生车辆分析

with tmp as (

/*ydb.pushdown('->')*/

select hphm,jgsj,quyu fromjiaotong_ydb

where ydbpartion = '1yi' and( quyu='光华路汇统花园' and jgsj<=201607201002 )

/*('<-')pushdown.ydb*/

)

select * from (

select tmp.hphm, count(*) asrows, max(tmp.jgsj) as max_jgsj

, size(collect_set(tmp.jgsj))as dist_jgsj, concat_ws('#',sort_array(collect_set(concat_ws(',',tmp.jgsj))))as detail

from tmp group by tmp.hphm )tmp2

wheretmp2.max_jgsj>201604111705 order by tmp2.dist_jgsj asc limit 10;

 

       至此即完成了手把手教你搭建即席查询与分析Demo,举出的几个典型场景来抛砖引玉,更多场景请小伙伴们自行发挥。没有搭建成功或者遇到问题的小伙伴,请加QQ群求助或交流:171465049(验证口令为vv8086的csdn博客)或在此给我评论留言。

       本次Demo的重点在于讲解Demo环境的搭建过程,所测试出的性能并不是最优的,“即席查询与分析性能调优”这部分我会出系列文章跟大家深入探讨,一步一步来教大家如何实现“万亿秒查”。这里先贴出一张YDB与SparkSQL和Parquet的性能对比,供大家参考!



 

推荐阅读
  • 本文详细介绍了在 Ubuntu 系统上搭建 Hadoop 集群时遇到的 SSH 密钥认证问题及其解决方案。通过本文,读者可以了解如何在多台虚拟机之间实现无密码 SSH 登录,从而顺利启动 Hadoop 集群。 ... [详细]
  • Write data HDFS via NFSgateway failed with
    近期真的是忙得不可开交,在构建100个节点集群的时,由于一些特殊的业务需求需要使用NFS ... [详细]
  • Linux下MySQL 8.0.28安装指南
    本文详细介绍了在Linux系统上安装MySQL 8.0.28的步骤,包括下载数据库、解压数据包、安装必要组件和启动MySQL服务。 ... [详细]
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • SecureCRT是一款功能强大的终端仿真软件,支持SSH1和SSH2协议,适用于在Windows环境下高效连接和管理Linux服务器。该工具不仅提供了稳定的连接性能,还具备丰富的配置选项,能够满足不同用户的需求。通过SecureCRT,用户可以轻松实现对远程Linux系统的安全访问和操作。 ... [详细]
  • 在搭建Hadoop集群以处理大规模数据存储和频繁读取需求的过程中,经常会遇到各种配置难题。本文总结了作者在实际部署中遇到的典型问题,并提供了详细的解决方案,帮助读者避免常见的配置陷阱。通过这些经验分享,希望读者能够更加顺利地完成Hadoop集群的搭建和配置。 ... [详细]
  • 构建高可用性Spark分布式集群:大数据环境下的最佳实践
    在构建高可用性的Spark分布式集群过程中,确保所有节点之间的无密码登录是至关重要的一步。通过在每个节点上生成SSH密钥对(使用 `ssh-keygen -t rsa` 命令并保持默认设置),可以实现这一目标。此外,还需将生成的公钥分发到所有节点的 `~/.ssh/authorized_keys` 文件中,以确保节点间的无缝通信。为了进一步提升集群的稳定性和性能,建议采用负载均衡和故障恢复机制,并定期进行系统监控和维护。 ... [详细]
  • Hadoop 2.6.0 HDFS Rack Awareness(机架感知)原理与配置步骤详解
    Hadoop2.6.0HDFSRackAwareness(机架感知)原理与配置步骤详解前言:  多副本前提下,在访问HadoopHDFS集群时,访问速度直接受到Datanode选取 ... [详细]
  • Unity与MySQL连接过程中出现的新挑战及解决方案探析 ... [详细]
  • 在Linux系统中,网络配置是至关重要的任务之一。本文详细解析了Firewalld和Netfilter机制,并探讨了iptables的应用。通过使用`ip addr show`命令来查看网卡IP地址(需要安装`iproute`包),当网卡未分配IP地址或处于关闭状态时,可以通过`ip link set`命令进行配置和激活。此外,文章还介绍了如何利用Firewalld和iptables实现网络流量控制和安全策略管理,为系统管理员提供了实用的操作指南。 ... [详细]
  • 在 CentOS 6.5 系统上部署 VNC 服务器的详细步骤与配置指南
    在 CentOS 6.5 系统上部署 VNC 服务器时,首先需要确认 VNC 服务是否已安装。通常情况下,VNC 服务默认未安装。可以通过运行特定的查询命令来检查其安装状态。如果查询结果为空,则表明 VNC 服务尚未安装,需进行手动安装。此外,建议在安装前确保系统的软件包管理器已更新至最新版本,以避免兼容性问题。 ... [详细]
  • SSAS入门指南:基础知识与核心概念解析
    ### SSAS入门指南:基础知识与核心概念解析Analysis Services 是一种专为决策支持和商业智能(BI)解决方案设计的数据引擎。该引擎能够为报告和客户端应用提供高效的分析数据,并支持在多维数据模型中构建高性能的分析应用。通过其强大的数据处理能力和灵活的数据建模功能,Analysis Services 成为了现代 BI 系统的重要组成部分。 ... [详细]
  • 在CentOS 6.5环境中,本文详细介绍了如何配置SSH无密钥登录,并成功执行PSSH命令。首先,确保系统已安装PSSH工具,可使用 `yum install pssh` 进行安装。若未配置免密钥登录,PSSH命令将无法正常执行,例如尝试运行 `pssh -H root@192.168.245.129 -i uptime` 时会失败。通过生成并分发SSH公钥,可以实现无密码登录,从而顺利执行PSSH命令。此外,本文还提供了详细的步骤和常见问题的解决方案,帮助用户顺利完成配置。 ... [详细]
  • Hadoop之Hive架构与设计
    Hadoop之Hive架构与设计Hadoop是一个能够对大量数据进行分布式处理的软件框架。具有可靠、高效、可伸缩的特点。HDFS:全称为Hadoop分布式文件系统& ... [详细]
  • Ambari修改主页面方法
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
author-avatar
小女人的忧伤--
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有