一、JDK安装
到oracle官网下载jdk-8u101-linux-x64.tar.gz
先查找并卸载自带openJDK
rpm -qa |grep openjdk yum -y remove *openjdk*
解压jdk-8u101-linux-x64.tar.gz到安装目录,如果没有特别说明,全文中安装目录都是指/wls/soft/
remove jdk-8u101-linux-x64.tar.gz /data/soft/ cd /data/soft tar zxvf jdk-8u101-linux-x64.tar.gz mv jdk-8u101-linux-x64.tar.gz java
配置JAVA_HOME
echo '## java configuration ' >> /etc/profile echo 'export JAVA_HOME=/wls/soft/java' >> /etc/profile echo 'export PATH=.:$JAVA_HOME/bin:$PATH' >> /etc/profile source /etc/profile
验证是否安装成功
java -version
去Zookeeper官网或者用wget下载安装包zookeeper-3.4.9.tar.gz
把zookeeper-3.4.9.tar.gz移动到安装目录并解压
mv zookeeper-3.4.9.tar.gz /data/soft/ cd /data/soft tar zxvf zookeeper-3.4.9.tar.gz mv zookeeper-3.4.9 zookeeper
编辑并保存zoo.cfg,配置文件如下
vi /wls/soft/zookeeper/conf/zoo.cfg #重新写入以下配置 tickTime=2000 initLimit=10 syncLimit=5 dataDir=/wls/soft/zookeeper clientPort=2181 server.1=dmp1:2888:3999 server.2=dmp2:2888:3999 server.3=dmp3:2888:3999
编辑hosts文件,对应server.*的主机名
vi /etc/hosts #写入集群主机名映射关系 10.20.26.30 dmp1 10.20.26.31 dmp2 10.20.26.32 dmp3
在dataDir下新增文件myid,填写值为server.*对应的编号
echo '1'>/wls/soft/zookeeper/myid
添加Zookeeper环境变量
echo '## zk configuration ' >> /etc/profile echo 'export ZOOKEEPER_HOME=/wls/soft/zookeeper' >> /etc/profile echo 'export PATH=$ZOOKEEPER_HOME/bin:$PATH' >> /etc/profile source /etc/profile
启动Zookeeper并查看状态,可以看到节点是leader还是follower
zkServer.sh start zkServer.sh status
这里用下载的hadoop-2.6.0-cdh5.5.0.tar.gz(!注:其中的配置文件是已经配置过的,只需要改成对应集群的名称及目录路径即可)
如果只有一块磁盘,该文档中的data0、data1都指data目录
hostname | ip | 安装组件 |
---|---|---|
dmp1 | Namenode/ResourceManager/journalNode/zkfc/jobhistoryServer /timeLineServer/proxyServer/metastore/hiveSerer2 | |
dmp2 | namenode/ResourceManager/journalNode/zkfc | |
dmp3 | DataNode/NodeManager/journalNode | |
dmp4 | DataNode/NodeManager | |
dmp5 | DataNode/NodeManager | |
dmp6 | DataNode/NodeManager | |
... | DataNode/NodeManager |
#### 3.2.1修改hosts文件####
修改所有节点的hosts文件,添加ip和集群列表中对应hostname
修改所有节点的/etc/sysconfig/network文件,修改对应的hostname,重启生效
service iptables off
修改所有节点文件:/etc/selinux/config,修改SELINUX=disabled
修改所有节点文件打开数量:/etc/security/limits.conf,增加一行内容 : * - nofile 1024000
修改所有节点最大进程数:/etc/security/limits.d/90-nproc.conf,增加一行:* - nproc 262144
修改所有节点内存配置:/etc/sysctl.conf,改为:
vm.overcommit_memory=1
vm.swappiness=0
新增用户wls81,并将wls81添加到hadoop组
useradd hadoop useradd wls81 usermod -a -G hadoop wls81 passwd wls81 Paic1234
将每个节点的数据磁盘路径权限设为775,这里假设每个磁盘挂载目录为data0,data1..data*
chmod -R 775 /data0 chmod -R 775 /data1
略
将安装包hadoop-2.6.0-cdh5.5.0.tar.gz解压到/data/soft
设置环境变量到~/.bashrc
export HADOOP_HOME=/data/soft/hadoop export HIVE_HOME=/data/soft/hive export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin
为每个节点创建用户工作目录:/data/wls81/
创建hdfs工作目录:/data/wls81/dfs、/data/wls81/dfs/logs、/data/wls81/dfs/pid
创建hive工作目录:/data/wls81/hive、/data/wls81/hive/logs
name | value | 描述 |
---|---|---|
fs.defaultFS | hdfs://dmp | 这里的值指的是默认的HDFS路径。 |
hadoop.tmp.dir | /data/wls81/tmp | 这里的路径默认是NameNode、DataNode、JournalNode等存放数据的公共目录。用户也可以自己单独指定这三类节点的目录 |
ha.zookeeper.quorum | dmp1:2181,dmp2:2181,dmp3:2181 | 这里是ZooKeeper集群的地址和端口。注意,数量一定是奇数,且不少于三个节点 |
fs.trash.interval | 2880 | 设置回收站保存时间 |
hadoop.proxyuser.dmp.hosts | * | 指定有访问权限的地址 |
hadoop.proxyuser.dmp.group | * | 指定有访问权限的用户组 |
name | value | 描述 |
---|---|---|
dfs.replication | 3 | 指定DataNode存储block的副本数量 |
dfs.namenode.name.dir | file:///data0/hdfs/name | 指定namenode元数据信息存储位置 |
dfs.datanode.data.dir | file:///data0/hdfs/data,file:///data1/hdfs/data,file:///data2/hdfs/data,.. | 指定datanode元数据信息存储位置, 设置成所有的磁盘; 测试环境中如果是只有一个盘就只写一个盘 |
dfs.nameservices | dmp | Hdfs的集群名称,自己定 |
dfs.ha.namenodes.dmp | dmp1,dmp2 | 指定NameService是dmp时的namenode有哪些,这里的值也是逻辑名称,名字随便起,相互不重复即可 |
dfs.namenode.rpc-address.dmp.dmp1 | dmp1:9000 | 指定rm1的RPC地址 |
dfs.namenode.http-address | 0.0.0.0:50070 | 指定http地址 |
dfs.namenode.rpc-address.dmp.dmp2 | dmp2:9000 | 指定rm2的RPC地址 |
dfs.journalnode.http-address | 0.0.0.0:8480 | 指定journalnode http |
dfs.namenode.shared.edits.dir | qjournal://dmp1;dmp2;dmp3/dmp | 指定dmp的两个NameNode共享edits文件目录时,使用的JournalNode集群信息 |
dfs.ha.automatic-failover.enabled | true | 即当NameNode出故障时,是否自动切换到另一台NameNode |
dfs.client.failover.proxy.provider.dmp | org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider | 指定NameNode出故障时,哪个实现类负责执行故障切换 |
dfs.journalnode.edits.dir | /data0/hdfs/journal | 指定JournalNode集群在对NameNode的目录进行共享时,自己存储数据的磁盘路径 |
dfs.ha.fencing.methods | sshfence | (说明:如果节点的22端口改了,请标明改成什么端口, hadoop2是用户名, 36102是节点端口 |
dfs.ha.fencing.ssh.private-key-files | /home/wls81/.ssh/id_rsa | 如果使用ssh进行故障切换,使用ssh通信时用的密钥存储的位置 |
dfs.permissions | false | 是否开启hdfs访问权限验证 |
key | value | desc |
---|---|---|
yarn.resourcemanager.ha.enabled | true | 打开resourcemanager ha模式 |
yarn.resourcemanager.cluster-id | yarn-ha-cluster | 设置resourcemanager ha的集群名称,进程启动后这个名称可以在zookeeper中查看 |
yarn.resourcemanager.ha.rm-ids | rm1,rm2 | 设置resourcemanager的id,可以与主机同名, 本例子与主机同名 |
yarn.resourcemanager.hostname.rm1 | dmp1 | 指定rm1对应哪一台主机 |
yarn.resourcemanager.hostname.rm2 | dmp2 | 指定rm2对应哪一台主机 |
yarn.resourcemanager.zk-address | dmp1:2181,dmp2:2181,dmp3:2181 | 设置zkurl |
yarn.nodemanager.aux-services | mapreduce_shuffle | 用什么方式进行数据传递 |
yarn.log-aggregation-enable | true | |
yarn.log.server.url | http://dmp1:19888/jobhistory/logs/ | 设置jobhistory的地址。 在这个地址有 |
yarn.resourcemanager.scheduler.class | org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler | 设置调 度器,不设就用默认。默认也可以 |
yarn.resourcemanager.scheduler.monitor.enable | true | 支持资源抢占 |
yarn.nodemanager.local-dirs | file:///data0/dfs/nm-local-dir,file:///data1/dfs/nm-local-dir,.. | |
yarn.nodemanager.resource.memory-mb | 20480 | nodeManager可人配的内存大小,设置成比总内存略小。120g的机器设置成110g |
yarn.nodemanager.resource.cpu-vcores | 32 | 设置nodemanager节点内存大小,CPU个数 |
yarn.timeline-service.enabled | true | 打开timeline服务 |
yarn.log-aggregation.retain-seconds | 86400 | 日志保留时间,默认不删除 |
key | value | desc |
---|---|---|
mapreduce.framework.name | yarn | 打开resourcemanager ha模式 |
mapreduce.jobhistory.address | dmp1:10020 | 设置jobhistory地址 |
mapreduce.jobhistory.webapp.address | dmp2:19888 | 设置ui jobhistory地址 |
mapreduce.reduce.input.buffer.percent | 0.8 | mr buffer占最大内存比率 |
将datanode的hostname按行写入slaves文件
YARN_LOG_DIR=/data/wls81/dfs/logs
YARN_PID_DIR=/data/wls81/dfs/pid
export JAVA_HOME=/data/soft/java/jdk1.8.0_101
export HADOOP_LOG_DIR=/data/wls81/dfs/log
export HADOOP_PID_DIR=/data0/wls81/dfs/pid
export JAVA_HOME=/data/soft/java/jdk1.8.0_101
export HADOOP_LOG_DIR=/data/wls81/dfs/log
export HADOOP_PID_DIR=/data0/wls81/dfs/pid
export JAVA_HOME=/data/soft/java/jdk1.8.0_101
将配置好的hadoop目录用scp分发到所有节点上
每个节点配置相同
在dmp1、dmp2上执行:hadoop-daemon.sh start journalnode
在dmp1上执行:hdfs zkfc -formatZK
在dmp1上执行
hdfs namenode -format hadoop-daemon.sh start namenode
在dmp2上执行
hdfs namenode -bootstrapStandby hadoop-daemon.sh start namenode
在dmp1上执行:start-dfs.sh
在dmp1上执行:start-yarn.sh
在dmp1上执行:
mr-jobhistory-daemon.sh start historyserver yarn-daemon.sh start proxyserver yarn-daemon.sh start timelineserver
启动,在dmp1上执行:
start-dfs.sh
start-yarn.sh
停止,在dmp1上执行:
stop-dfs.sh
stop-yarn.sh
这里hive使用mysql作元数据存储,mysql安装过程略。
安装完以后创建hive元数据的schema
create database hive default charset latin1;
这里使用hive2.1.1版本进行安装。(!注:其中的配置文件是已经配置过的,已包含mysql驱动包,只需要改成对应集群的名称及目录路径即可)
将hive2.1.1.tar.gz解压到/data/soft
在hadoop安装过程中已配置
cp hive-default.xml.template hive-site.xml
修改javax.jdo.option.ConnectionURL的值为mysql连接url
修改javax.jdo.option.ConnectionDriverName为mysql用户名
修改javax.jdo.option.ConnectionPassword的值为mysql密码
修改hive.metastore.schema.verification的值为false
cp hive-exec-log4j2.properties.template hive-exec-log4j2.properties
cp hive-log4j2.properties.template hive-log4j2.properties
在hive的bin下面执行:./schematool -initSchema -dbType mysql
vi start-metastore.sh
#/bin/sh if [ -z "${HIVE_HOME}" ]; then export HIVE_HOME="$(cd "`dirname "$0"`"/..; pwd)" fi echo $HIVE_HOME nohup $HIVE_HOME/bin/hive --service metastore > $HIVE_HOME/logs/metastore.log 2>&1 & echo $$
chmod u+x start-metastore.sh
./start-metastore.sh
vi start-hiveserver2.sh
#/bin/sh if [ -z "${HIVE_HOME}" ]; then export HIVE_HOME="$(cd "`dirname "$0"`"/..; pwd)" fi echo $HIVE_HOME nohup $HIVE_HOME/bin/hive --service hiveserver2 > $HIVE_HOME/logs/hiveserver2.log 2>&1 & echo $$
chmod u+x start-hiveserver2.sh
./start-hiveserver2.sh
执行命令:hive
即可以操作hive sql
下载并编译Azkaban3.10.0,这里直接使用已编译和配置的安装包Azkaban3.10.0.tar.gz
将Azkaban3.10.0.tar.gz解压到/data0/soft目录下
进入/data0/soft/azkaban/plugins/jobtypes/hive/
将plugin.properties和private.properties中hive.aux.jars.path修改为hive lib目录
hive.aux.jars.path=/data0/soft/hive2.1.1/lib
进入/data0/soft/azkaban/plugins/jobtypes/spark/
将private.properties中jobtype.classpath注释掉
进入/data0/soft/azkaban/plugins/jobtypes,将common.properties中相关应用的根目录修改为实际安装目录
hadoop.home=/data0/soft/hadoop-2.6.0-cdh5.5.0 hive.home=/data0/soft/hive2.1.1 pig.home=/dpata0/soft/azkaban/plugins/jobtype/pig //spark.home=不存在的组件不用配置 azkaban.home=/data0/soft/azkaban
修改private.properties,参照上面修改应用对应目录
hadoop.home=/data0/soft/hadoop-2.6.0-cdh5.5.0 hive.home=/data0/soft/hive2.1.1 jobtype.classpath=${hadoop.home}/etc/hadoop:${hadoop.home}/share/hadoop/common/*:${hadoop.home}/share/hadoop/common/lib/*:${hadoop.home}/share/hadoop/hdfs/*:${hadoop.home}/share/hadoop/hdfs/lib/*:${hadoop.home}/share/hadoop/yarn/*:${hadoop.home}/share/hadoop/yarn/lib/*:${hadoop.home}/share/hadoop/mapreduce/*:${hadoop.home}/share/hadoop/mapreduce/lib/*:${hive.home}/conf:${hive.home}/lib/*
修改commonprivate.properties,按上面修改应用对应根目录,然后修改类路径
hadoop.home=/data0/soft/hadoop-2.6.0-cdh5.5.0 hive.home=/data0/soft/hive2.1.1 pig.home=/dpata0/soft/azkaban/plugins/jobtype/pig //spark.home=不存在的组件不用配置 azkaban.home=/data0/soft/azkaban jobtype.global.classpath=${hadoop.home}/etc/hadoop:${hadoop.home}/share/hadoop/common/*:${hadoop.home}/share/hadoop/common/lib/*:${hadoop.home}/share/hadoop/hdfs/*:${hadoop.home}/share/hadoop/hdfs/lib/*:${hadoop.home}/share/hadoop/yarn/*:${hadoop.home}/share/hadoop/yarn/lib/*:${hadoop.home}/share/hadoop/mapreduce/*:${hadoop.home}/share/hadoop/mapreduce/lib/*:${hive.home}/conf:${hive.home}/lib/* hadoop.classpath=${hadoop.home}/etc/hadoop:${hadoop.home}/share/hadoop/common/*:${hadoop.home}/share/hadoop/common/lib/*:${hadoop.home}/share/hadoop/hdfs/*:${hadoop.home}/share/hadoop/hdfs/lib/*:${hadoop.home}/share/hadoop/yarn/*:${hadoop.home}/share/hadoop/yarn/lib/*:${hadoop.home}/share/hadoop/mapreduce/*:${hadoop.home}/share/hadoop/mapreduce/lib/*
修改/data0/soft/azkaban/conf/azkaban.properties
default.timezone.id=Asia/Shanghai database.type=mysql mysql.port=3306 mysql.host=10.1.2.xxx mysql.database=azkaban mysql.user=user mysql.password=pass mysql.numconnections=50 azkaban.webserver.url=http://10.1.2.xxx:8081 azkaban.name=DMP azkaban.label=DMP Scheduling Center
修改/data0/soft/azkaban/bin/azkaban-solo-start.sh,加入java环境变量
export PATH=/usr/java/jdk1.8.0_101/bin:$PATH
拷贝commons-configuration-1.6.jar和hadoop-common-2.6.0-cdh5.5.0.jar两个jar包到/data0/soft/azkaban/lib目录下(这里已经打包在里边了)
在根目录下启动Azkaban(必须),bin/azkaban-solo-start.sh
在根目录下关闭Azkaban,bin/azkaban-solo-shutdown.sh