数据平台笔记-Hadoop搭建

基本的硬件组装完成后,需要安装hadoop,目前有好几个版本可供选择,我选择的是较低的一个版本,而且是手动安装,具体下载链接请去官网寻找。在安装之前,先做好hadoop平台规划,那个节点是主节点,那个是从节点,机器名统一,做到见名知意。

在主从节点通信时,通过ssh时需要验证密码,我们需要设置免密码的方式进行通讯。包括master到所有slave免密码,master到master自身需要免密码,具体设置方式请看以前的一篇文章。另外,在所有节点的hosts中配置好所有节点和机器名的对应关系。

systemctl status firewalld.service systemctl stop firewalld.service systemctl disable firewalld.service 设置selinux为disable /et/selinux/config

所有节点需要同步时间,保证软件的工作正常,安装ntp服务

yum -y install ntp systemctl enable ntpd systemctl start ntpd timedatectl set-timezone Asia/Shanghai timedatectl set-ntp yes systemctl restart ntpd ntpq -p

在使用hbase时会打开很多文件,所有节点需要设置linux系统本身支持的文件打开数,同时还要设置hadoop组件的进程数目。

* soft nofile 1000000 * hard nofile 1000000 hdfs - nofile 32768 mapred - nofile 32768 hbase - nofile 32768 hive - nproc 32768 yarn - nproc 32768 storm - nproc 32768

hbase或者hadoop存储数据时支持多种压缩,可以使用命令

在系统的环境配置文件(/etc/profile)中设置好所有hadoop的环境变量,包括java环境变量,供各个组件使用

export JAVA_HOME=/usr/java/jdk1.8.0_121 export HADOOP_HOME=/opt/hadoop-2.5.2 export HADOOP_COMMON_HOME=$HADOOP_HOME export HADOOP_HDFS_HOME=$HADOOP_HOME export HADOOP_MAPRED_HOME=$HADOOP_HOME export HADOOP_YARN_HOME=$HADOOP_HOME export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop export HBASE_HOME=/opt/hbase-0.98.9-hadoop2 export CLASSPATH=.:$JAVA_HOME/lib:$HADOOP_HOME/lib:$CLASSPATH export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HBASE_HOME/bin:$PATH export SPARK_HOME=/opt/spark-1.6.3 export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin

下载的hadoop以及其他软件都放在/opt目录下,然后进入目录/opt/hadoop-2.5.2/etc下,配置相关文件

slaves 填写所有的从节点机器名

core-site.xml 填写hdfs协议的地址和端口

<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://ibdp-00:9000</value> </property> <property> <name>io.compression.codecs</name> <value> org.apache.hadoop.io.compress.GzipCodec, org.apache.hadoop.io.compress.DefaultCodec, org.apache.hadoop.io.compress.BZip2Codec, org.apache.hadoop.io.compress.SnappyCodec </value> </property> </configuration>

hdfs-site.xml 配置好hdfs的备份份数和namenode和datanode的存储目录,以及开启webhdfs功能

<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/home/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/home/dfs/data</value> </property> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> <!-- Specifies the maximum number of threads to use for transferring data in and out of the DN. --> <property> <name>dfs.datanode.max.transfer.threads</name> <value>8192</value> </property> </configuration>

yarn-env.sh

export JAVA_HOME=/usr/java/jdk1.8.0_121

yarn-site.xml 主要配置资源管理器yarn主节点相关

<property> <name>yarn.resourcemanager.address</name> <value>ibdp-00:8032</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>ibdp-00:8030</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>ibdp-00:8031</value> </property> <property> <name>yarn.resourcemanager.admin.address</name> <value>ibdp-00:8033</value> </property> <property> <name>yarn.resourcemanager.webapp.address</name> <value>ibdp-00:8088</value> </property>

hadoop-env.sh

export JAVA_HOME=/usr/java/jdk1.8.0_121

配置好后,拷贝目录到所有slave的相同目录下即可,然后开始第一次格式化所有节点的hdfs

cd /opt/hadoop/bin/ ./hdfs namenode -format

在安装过程中可能会反复这个步骤,那就需要清空hdfs的数据,如下

清空配置的namenode和datanode目录下所有数据 清空/tmp下hadoop目录中的临时数据 清空zookeeper中/opt/zookeeper-data/version-2目录下所有数据,该目录存储了zookeeper的数据

启动hadoop命令比较简单,在master上直接执行一条命令即可,会启动所有slave节点的hadoop组件

./opt/hadoop-2.5.2/sbin/start-all.sh

通过命令jps可以查看hadoop的组件是否已经安装完成

slave: 6176 NodeManager 5339 DataNode master: 5603 SecondaryNameNode 5174 NameNode 5820 ResourceManager

在hadoop维护过程中,会需要重启单个节点的服务,比如namenode服务挂掉,或者datanode服务挂掉

./opt/hadoop-2.5.2/sbin/yarn-daemon.sh start nodemanager ./opt/hadoop-2.5.2/sbin/hadoop-daemon.sh start datanode

虽然hadoop本身是不需要zookeeper支持的,但是后面我们数据存储选择了hbase,hbase自身携带的zk服务我们不需要,所以需要一个统一的zk服务,支持集群,以保证整个大数据平台的zk服务的稳定性。zk集群需要奇数位的节点,我们选择3个节点部署zk集群。

同样,zookeeper下载后,统一放在/opt目录下,然后进行配置,主要配置文件为zoo.cfg,配置通信节点和数据保存目录。

server.1=ibdp-01:2888:3888 server.2=ibdp-02:2888:3888 server.3=ibdp-03:2888:3888 dataDir=/opt/zookeeper-data clientPort=2181

./opt/zookeeper-3.4.9/bin/zkServer.sh start

zk服务决定了整个集群的数据一致性,特别对于hbase的数据,其中region数据等等的一致性都是通过zk来保存的,如果一旦hbase出现问题,请先清空zk中的hbase目录数据,重新启动hbase即可重新写入zk。日常维护zk,使用命令行即可。

./opt/zookeeper-3.4.9/bin/zkCli.sh -server 192.168.3.201:2181,192.168.3.202:2181,192.168.3.203:2181

另外zk的日志很大,需要定时清理,如果手动清理的话,可以使用命令保留最近几日的数据。通过jps可以查看到zk服务的进程

./bin/zkCleanup.sh -n 5

hbase我们使用zk集群提供服务,并且hbase是依赖hdfs的,配置位于

hbase-site.xml 配置依赖的hdfs地址和zk服务

<property> <name>hbase.rootdir</name> <value>hdfs://ibdp-00:9000/hbase</value> </property> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> <property> <name>hbase.zookeeper.property.clientPort</name> <value>2181</value> </property> <property> <name>hbase.zookeeper.property.dataDir</name> <value>/opt/zookeeper-data</value> </property> <property> <name>hbase.zookeeper.quorum</name> <value>ibdp-01,ibdp-02,ibdp-03</value> </property>

hbase-env.sh

export HBASE_MANAGES_ZK=false export JAVA_HOME=/usr/java/jdk1.8.0_121

hbase正常使用前提是,指定了zk服务和压缩功能的设置,以及os的文件数目设置,前文中已经提及snappy的配置,请自行参考。启动hbase通过master即可,在master上一个命令所有slave即启动

./opt/hbase-0.98.9-hadoop2/bin/start-hbase.sh

我们在使用hbase时是通过python的客户端进行操作的,需要打开hbase的thrift服务,命令如下

./opt/hbase-0.98.9-hadoop2/bin/hbase-daemon.sh start thrift

如果某个regionserver挂点,需要单独启动,用如下命令

/bin/hbase-daemon.sh start regionserver

jps查看hbase进程,可以看到

master: 7092 HMaster slave: 7072 HRegionServer

为了实时接收交易所的行情数据,先把数据存储在kafka中,然后在进行处理写库。同样搭建kafka集群保证接收行情数据第一关不会出问题,搭建3个节点的集群,使用大数据平台的zk服务。配置文件位于

server.properties 配置kafka数据目录,zk服务地址等

advertised.host.name=192.168.3.202 # 每个节点ip都不同 advertised.host.port=9092 # 每个节点端口保持一致 broker.id=0 # 每个节点broken id不同 log.dirs=/home/kafka-data # 数据保存位置 num.partitions=3 # 每个topic保留3分,总共3个节点 log.retention.hours=168 # 数据保存时间 zookeeper.connect=192.168.3.201:2181,192.168.3.202:2181,192.168.3.203:2181 default.replication.factor=3

使用外部的zk服务时,zookeeper.properties中的dataDir配置失效。在维护kafka的过程中,有时需要删除topic的数据,而且是所有的数据,步骤如下

停止kafka 停止所有的生产者和消费者程序,如果不停止很可能删除topic后又被惯回来 删除某一个zk节点,如rmr /brokers/topics,其他节点中的相应目录自动同步删除 删除kafka安装目录中的server.properties中的log.dirs配置目录中的所有数据 重启kafka ./bin/kafka-server-start.sh -daemon config/server.properties

启动kafka后,用jps会查看到kafka进程。

以上是hadoop平台搭建的主要配置,就单个组件的配置来说还有很多可配置的地方,请参考官方文档。在启动所有组件时,安装如下顺序启动,命令如下

hadoop集群 ./sbin/start-all.sh ./sbin/stop-all.sh Zookeeper集群 ./zkServer.sh start kafka集群 ./bin/kafka-server-start.sh -daemon config/server.properties hbase集群 ./bin/start-hbase.sh thrift(主节点上) ./hbase-daemon.sh start thrift