0. 环境说明

系统环境:

  • 操作系统:CentOs 7.2
  • Hadoop版本:CDH6.2.0
  • JDK版本:java-1.8.0-openjdk
  • 运行用户:root

集群各节点角色规划为:

  1. 192.168.56.11 cdh1 NameNodeResourceManagerHBaseHive metastoreImpala CatalogImpala statestoreSentry
  2. 192.168.56.12 cdh2 DataNodeNodeManagerHBaseHive Server2Impala Server
  3. 192.168.56.13 cdh3 DataNodeNodeManagerHBaseHive Server2Impala Server

cdh1作为管理节点,安装脚本在cdh1上执行。

1. 准备工作

1.1 准备虚拟机

参考使用Vagrant创建虚拟机安装Hadoop创建三台虚拟机。

1.2、禁用防火墙

保存存在的iptables规则:

  1. iptables-save > ~/firewall.rules

rhel7系统禁用防火墙:

  1. systemctl disable firewalld
  2. systemctl stop firewalld

设置SELinux模式:

  1. setenforce 0 >/dev/null 2>&1
  2. sed -i "s/.*SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config

一个考虑操作系统情况的综合示例:

  1. [ -f /etc/init.d/iptables ] && FIREWALL="iptables"
  2. [ -f /etc/init.d/SuSEfirewall2_setup ] && FIREWALL="SuSEfirewall2_setup"
  3. [ -f /etc/init.d/boot.apparmor ] && SELINUX="boot.apparmor"
  4. [ -f /usr/sbin/setenforce ] && SELINUX="selinux"
  5. service $FIREWALL stop >/dev/null 2>&1
  6. chkconfig $FIREWALL off > /dev/null 2>&1
  7. if [ $SELINUX == "selinux" ]; then
  8. sed -i "s/.*SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config
  9. setenforce 0 >/dev/null 2>&1
  10. elif [ $SELINUX == "boot.apparmor" ]; then
  11. service boot.apparmor stop >/dev/null 2>&1
  12. chkconfig boot.apparmor off >/dev/null 2>&1
  13. fi

1.4 禁用IPv6

CDH 要求使用 IPv4,IPv6 不支持,禁用IPv6方法:

  1. cat > /etc/sysctl.conf <<EOF
  2. net.ipv6.conf.all.disable_ipv6=1
  3. net.ipv6.conf.default.disable_ipv6=1
  4. net.ipv6.conf.lo.disable_ipv6=1
  5. EOF

使其生效:

  1. sysctl -p

最后确认是否已禁用:

  1. cat /proc/sys/net/ipv6/conf/all/disable_ipv6
  2. 1

1.5 配置hosts

修改每个节点/etc/hosts文:

  1. cat > /etc/hosts <<EOF
  2. 127.0.0.1 localhost
  3. 192.168.56.11 cdh1 cdh1.example.com
  4. 192.168.56.12 cdh2 cdh2.example.com
  5. 192.168.56.13 cdh3 cdh3.example.com
  6. EOF

在每个节点分别配置网络名称。例如在cdh1节点上:

  1. hostname
  2. cdh1.example.com
  3. hostnamectl set-hostname $(hostname)

修改网络名称:

  1. cat > /etc/sysconfig/network<<EOF
  2. HOSTNAME=$(hostname)
  3. EOF

查看hostname是否修改过来:

  1. uname -a
  2. Linux cdh1.example.com 3.10.0-327.4.5.el7.x86_64 #1 SMP Mon Jan 25 22:07:14 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

查看ip是否正确:

  1. yum install net-tools -y && ifconfig |grep -B1 broadcast
  2. enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
  3. inet 10.0.2.15 netmask 255.255.255.0 broadcast 10.0.2.255
  4. --
  5. enp0s8: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
  6. inet 192.168.56.11 netmask 255.255.255.0 broadcast 192.168.56.255

检查一下:

  1. yum install bind-utils -y && host -v -t A `hostname`

1.6 设置中文编码和时区

查看中文:

  1. locale -a | grep zh

如果没有,则安装:

  1. yum install glibc-common

修改配置文件:

  1. cat > /etc/locale.conf <<EOF
  2. LANG="zh_CN.UTF-8"
  3. LC_CTYPE=zh_CN.UTF-8
  4. LC_ALL=zh_CN.UTF-8
  5. EOF
  6. source /etc/locale.conf
  7. cat > /etc/sysconfig/i18n <<EOF
  8. LANG="zh_CN.UTF-8"
  9. LC_ALL="zh_CN.UTF-8"
  10. EOF

设置时区:

  1. sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

1.7 设置root密码

  1. # Setup sudo to allow no-password sudo for "admin". Additionally,
  2. # make "admin" an exempt group so that the PATH is inherited.
  3. cp /etc/sudoers /etc/sudoers.orig
  4. echo "root ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
  5. echo 'redhat'|passwd root --stdin >/dev/null 2>&1

1.8 设置命名服务

  1. # http://ithelpblog.com/os/linux/redhat/centos-redhat/howto-fix-couldnt-resolve-host-on-centos-redhat-rhel-fedora/
  2. # http://stackoverflow.com/a/850731/1486325
  3. echo "nameserver 8.8.8.8" | tee -a /etc/resolv.conf
  4. echo "nameserver 8.8.4.4" | tee -a /etc/resolv.conf

1.9 生成ssh

在每个节点依次执行:

  1. [ ! -d ~/.ssh ] && ( mkdir ~/.ssh ) && ( chmod 600 ~/.ssh )
  2. [ ! -f ~/.ssh/id_rsa.pub ] && (yes|ssh-keygen -f ~/.ssh/id_rsa -t rsa -N "") \
  3. && ( chmod 600 ~/.ssh/id_rsa.pub ) && cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

1.10 时钟同步

每个节点执行

  1. yum install ntp -y

修改时钟服务器:

  1. sed -i "/^server/ d" /etc/ntp.conf #删除行
  2. cat << EOF | sudo tee -a /etc/ntp.conf
  3. server ntp1.aliyun.com
  4. server ntp2.aliyun.com
  5. server ntp3.aliyun.com
  6. server ntp4.aliyun.com
  7. EOF

启动 ntp:

  1. sudo systemctl start ntpd
  2. #设置开机启动
  3. sudo systemctl enable ntpd

同步硬件时钟:

  1. hwclock --systohc

查看硬件时钟:

  1. hwclock --show

同步时间:

  1. ntpdate -u ntp1.aliyun.com

1.11 虚拟内存设置

Cloudera 建议将/proc/sys/vm/swappiness设置为 0,当前设置为 60。
临时解决,通过echo 0 > /proc/sys/vm/swappiness即可解决。
永久解决:

  1. sysctl -w vm.swappiness=0
  2. echo vm.swappiness = 0 >> /etc/sysctl.conf

1.12 设置透明大页面

  1. echo "echo never > /sys/kernel/mm/redhat_transparent_hugepage/defrag" >/etc/rc.local
  2. echo "echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabled" >/etc/rc.local

给与可执行权限:chmod +x /etc/rc.d/rc.local

1.13 设置文件打开数

  1. rst=`grep "^fs.file-max" /etc/sysctl.conf`
  2. if [ "x$rst" = "x" ] ; then
  3. echo "fs.file-max = 727680" >> /etc/sysctl.conf || exit $?
  4. else
  5. sed -i "s:^fs.file-max.*:fs.file-max = 727680:g" /etc/sysctl.conf
  6. fi
  7. addline "* soft nofile 327680" /etc/security/limits.conf
  8. addline "* hard nofile 327680" /etc/security/limits.conf
  9. addline "root soft nofile 327680" /etc/security/limits.conf
  10. addline "root hard nofile 327680" /etc/security/limits.conf
  11. curuser=`whoami`
  12. for user in hdfs mapred hbase zookeeper hive impala flume $curuser ;do
  13. addline "$user soft nproc 131072" /etc/security/limits.conf
  14. addline "$user hard nproc 131072" /etc/security/limits.conf
  15. done

这里用到了一个函数:

  1. function addline {
  2. line=$1
  3. file=$2
  4. tempstr=`grep "$line" $file 2>/dev/null`
  5. if [ "$tempstr" == "" ]; then
  6. echo "$line" >>$file
  7. fi
  8. }

1.14 安装jdk

jdk版本看cdh版本而定,我这里是jdk1.8。
先卸载:

  1. yum remove java* -y

每个节点安装jdk:

  1. yum install -y java-1.8.0-openjdk-devel

设置环境变量:

  1. cat << EOF | sudo tee -a /etc/profile
  2. export JAVA_HOME=/usr/lib/jvm/java
  3. export CLASSPATH=.:\$JAVA_HOME/lib:\$JAVA_HOME/jre/lib:\$CLASSPATH
  4. export PATH=\$JAVA_HOME/bin:\$JAVA_HOME/jre/bin:\$PATH
  5. EOF
  6. source /etc/profile

1.15 配置SSH无密码登陆

image-20190703162002253
每个节点先生成ssh公钥,参考上面说明。
配置无密码登陆,在每个节点上执行以下命令:

  1. ssh-copy-id -i /root/.ssh/id_rsa.pub root@cdh1
  2. ssh-copy-id -i /root/.ssh/id_rsa.pub root@cdh2
  3. ssh-copy-id -i /root/.ssh/id_rsa.pub root@cdh3

然后,在其他节点上类似操作。
也可以使用expect来操作:

  1. ssh_nopassword.expect cdh1 root #root是要设置的密码
  2. ssh_nopassword.expect cdh1 root
  3. ssh_nopassword.expect cdh1 root

ssh_nopassword.expect文件内容如下:

  1. #! /usr/bin/expect -f
  2. set host [lindex $argv 0]
  3. set password [lindex $argv 1]
  4. spawn ssh-copy-id -i /root/.ssh/id_rsa.pub root@$host
  5. expect {
  6. yes/no {send "yes\r";exp_continue}
  7. -nocase "password:" {send "$password\r"}
  8. }
  9. expect eof

.ssh文件夹下的文件功能解释
(1)~/.ssh/known_hosts :记录ssh访问过计算机的公钥(public key)
(2)id_rsa :生成的私钥
(3)id_rsa.pub :生成的公钥
(4)authorized_keys :存放授权过得无秘登录服务器公钥

1.16 配置cdh yum源

配置cdh6.2的远程yum源:

  1. cat > /etc/yum.repos.d/cdh6.repo <<EOF
  2. [cloudera-cdh]
  3. name=Cloudera's Distribution for Hadoop, Version 6
  4. baseurl=https://archive.cloudera.com/cdh6/6.2.0/redhat7/yum/
  5. gpgkey = https://archive.cloudera.com/cdh6/6.2.0/redhat7/yum/RPM-GPG-KEY-cloudera
  6. enabled=1
  7. gpgcheck = 1
  8. EOF

将/etc/yum.repos.d/cdh6.repo拷贝到其他节点:

  1. scp /etc/yum.repos.d/cdh6.repo root@cdh2:/etc/yum.repos.d/cdh6.repo
  2. scp /etc/yum.repos.d/cdh6.repo root@cdh3:/etc/yum.repos.d/cdh6.repo

也可以将yum远程同步到本地,设置本地yum源:

  1. yum -y install createrepo yum-utils
  2. mkdir -p /mnt/yum
  3. cd /mnt/yum
  4. reposync -r cloudera-cdh
  5. createrepo cloudera-cdh
  6. yum clean all

2. 安装HDFS

根据文章开头的节点规划,cdh1 为NameNode节点,cdh1、cdh2 和 cdh3 为DataNode节点
在 cdh1 节点安装 hadoop-hdfs-namenode:

  1. yum install hadoop-hdfs-namenode -y

在cdh1、cdh2、cdh3节点安装 hadoop-hdfs-datanode

  1. yum install hadoop hadoop-hdfs-datanode -y

NameNode HA 的配置过程请参考CDH中配置HDFS HA,建议暂时不用配置。

2.1 修改hadoop配置文件

修改/etc/hadoop/conf/core-site.xml

  1. <property>
  2. <name>fs.defaultFS</name>
  3. <value>hdfs://cdh1:8020</value>
  4. </property>
  5. <property>
  6. <name>hadoop.tmp.dir</name>
  7. <value>/var/hadoop</value>
  8. </property>

更多的配置信息说明,请参考 Apache Cluster Setup

修改/etc/hadoop/conf/hdfs-site.xml,dfs.namenode.http-address如果不指定,默认端口为9870:

  1. <configuration>
  2. <property>
  3. <name>dfs.namenode.http-address</name>
  4. <value>cdh1:9870</value>
  5. </property>
  6. <!-- CLOUDERA-BUILD: CDH-64745. -->
  7. <property>
  8. <name>cloudera.erasure_coding.enabled</name>
  9. <value>true</value>
  10. </property>
  11. </configuration>

注意:需要将配置文件同步到各个节点。

设置文件权限相关,请参考 HDFS Extended ACLs0630-6.2-什么是HDFS ACL

  1. <property>
  2. <name>dfs.permissions.superusergroup</name>
  3. <value>hadoop</value>
  4. </property>
  5. <property>
  6. <name>dfs.permissions.umask-mode</name>
  7. <value>022</value>
  8. </property>

2.2 指定本地文件目录

在hadoop中默认的文件路径以及权限要求如下:

  1. 目录 所有者 权限 默认路径
  2. hadoop.tmp.dir hdfs:hdfs drwx------ /tmp/hadoop-${user}
  3. dfs.namenode.name.dir hdfs:hdfs drwx------ file://${hadoop.tmp.dir}/dfs/name
  4. dfs.datanode.data.dir hdfs:hdfs drwx------ file://${hadoop.tmp.dir}/dfs/data
  5. dfs.namenode.checkpoint.dir hdfs:hdfs drwx------ file://${hadoop.tmp.dir}/dfs/namesecondary

我在hdfs-site.xm l中配置了hadoop.tmp.dir的路径为/var/hadoop,其他路径使用默认配置,所以,在NameNode上手动创建 dfs.namenode.name.dir 的本地目录:

  1. mkdir -p /var/hadoop/dfs/name
  2. chown -R hdfs:hdfs /var/hadoop/dfs/name

在DataNode上手动创建 dfs.datanode.data.dir目录:

  1. mkdir -p /var/hadoop/dfs/data
  2. chown -R hdfs:hdfs /var/hadoop/dfs/data

hadoop的进程会自动设置 dfs.data.dirdfs.datanode.data.dir,但是 dfs.name.dirdfs.namenode.name.dir 的权限默认为755,需要手动设置为700:

  1. chmod 700 /var/hadoop/dfs/name
  2. # 或者
  3. chmod go-rx /var/hadoop/dfs/name

注意:DataNode的本地目录可以设置多个,你可以设置 dfs.datanode.failed.volumes.tolerated 参数的值,表示能够容忍不超过该个数的目录失败。

2.3 配置 SecondaryNameNode

不建议使用。

2.4 开启回收站功能

回收站功能默认是关闭的,建议打开。在 /etc/hadoop/conf/core-site.xml 中添加如下两个参数:

  • fs.trash.interval,该参数值为时间间隔,单位为分钟,默认为0,表示回收站功能关闭。该值表示回收站中文件保存多长时间,如果服务端配置了该参数,则忽略客户端的配置;如果服务端关闭了该参数,则检查客户端是否有配置该参数;
  • fs.trash.checkpoint.interval,该参数值为时间间隔,单位为分钟,默认为0。该值表示检查回收站时间间隔,该值要小于fs.trash.interval,该值在服务端配置。如果该值设置为0,则使用 fs.trash.interval 的值。

    2.5 (可选)配置DataNode存储的负载均衡

    /etc/hadoop/conf/hdfs-site.xml 中配置以下三个参数:

  • dfs.datanode.fsdataset. volume.choosing.policy

  • dfs.datanode.available-space-volume-choosing-policy.balanced-space-threshold
  • dfs.datanode.available-space-volume-choosing-policy.balanced-space-preference-fraction

详细说明,请参考 Optionally configure DataNode storage balancing

2.6 开启WebHDFS

在NameNode节点上安装:

  1. yum install hadoop-httpfs -y

然后修改 /etc/hadoop/conf/core-site.xml配置代理用户:

  1. <property>
  2. <name>hadoop.proxyuser.httpfs.hosts</name>
  3. <value>*</value>
  4. </property>
  5. <property>
  6. <name>hadoop.proxyuser.httpfs.groups</name>
  7. <value>*</value>
  8. </property>

2.7 配置LZO

下载repo文件到 /etc/yum.repos.d/:

然后,安装lzo:

  1. yum install hadoop-lzo* impala-lzo -y

最后,在 /etc/hadoop/conf/core-site.xml 中添加如下配置:

  1. <property>
  2. <name>io.compression.codecs</name>
  3. <value>org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.GzipCodec,
  4. org.apache.hadoop.io.compress.BZip2Codec,com.hadoop.compression.lzo.LzoCodec,
  5. com.hadoop.compression.lzo.LzopCodec</value>
  6. </property>
  7. <property>
  8. <name>io.compression.codec.lzo.class</name>
  9. <value>com.hadoop.compression.lzo.LzoCodec</value>
  10. </property>

更多关于LZO信息,请参考:Using LZO Compression

2.8 (可选)配置Snappy

cdh 的 rpm 源中默认已经包含了 snappy ,直接在每个节点安装Snappy:

  1. yum install snappy snappy-devel -y

然后,在 core-site.xml 中修改io.compression.codecs的值,添加 org.apache.hadoop.io.compress.SnappyCodec
使 snappy 对 hadoop 可用:

  1. ln -sf /usr/lib64/libsnappy.so /usr/lib/hadoop/lib/native/

2.9 启动HDFS

将cdh1上的配置文件同步到每一个节点:

  1. scp -r /etc/hadoop/conf root@cdh2:/etc/hadoop/
  2. scp -r /etc/hadoop/conf root@cdh3:/etc/hadoop/

在cdh1节点格式化NameNode:

  1. sudo -u hdfs hdfs namenode -format

在cdh1启动namenode,其他节点启动datanode:

  1. /etc/init.d/hadoop-hdfs-namenode start
  2. /etc/init.d/hadoop-hdfs-datanode start

在cdh1节点上查看java进程:

  1. jps
  2. 12721 DataNode
  3. 12882 Jps
  4. 12587 NameNode

在 hdfs 运行之后,创建 /tmp 临时目录,并设置权限为 1777

  1. sudo -u hdfs hadoop fs -mkdir /tmp
  2. sudo -u hdfs hadoop fs -chmod -R 1777 /tmp

如果安装了HttpFS,则启动 HttpFS 服务:

  1. service hadoop-httpfs start

2.10 测试

如果使用CM安装,则Hadoop各组件使用的端口可查阅 Ports Used by CDH Components
可以通过 http://cdh1:9870/ (需要先在本机配置虚拟机节点的hosts映射才能访问)可以访问 NameNode 页面,也可以访问datanode节点,如:http://cdh1:9864/
如果安装了webhdfs,可以使用 curl 运行下面命令,可以测试 webhdfs 并查看执行结果:

  1. curl "http://cdh1:14000/webhdfs/v1?op=gethomedirectory&user.name=hdfs"
  2. {"Path":"\/var\/lib\/hadoop-httpfs"}

更多的 API,请参考 WebHDFS REST API

3. 安装YARN

根据文章开头的节点规划,cdh1 为resourcemanager节点,cdh2 和 cdh3 为nodemanager节点,为了简单,historyserver 也装在 cdh1 节点上。

3.1 安装服务

在 cdh1 节点安装:

  1. yum install hadoop-yarn-resourcemanager -y
  2. #安装 historyserver
  3. yum install hadoop-mapreduce-historyserver hadoop-yarn-proxyserver -y

在 cdh2、cdh3 节点安装:

  1. yum install hadoop-yarn-nodemanager -y

3.2 修改配置参数

1、要想使用YARN,需要在 /etc/hadoop/conf/mapred-site.xml 中做如下配置:

  1. <property>
  2. <name>mapreduce.framework.name</name>
  3. <value>yarn</value>
  4. </property>

2、修改 /etc/hadoop/conf/yarn-site.xml文件内容:

  1. <configuration>
  2. <property>
  3. <name>yarn.resourcemanager.hostname</name>
  4. <value>cdh1</value>
  5. </property>
  6. <property>
  7. <name>yarn.nodemanager.aux-services</name>
  8. <value>mapreduce_shuffle</value>
  9. </property>
  10. <property>
  11. <name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>
  12. <value>org.apache.hadoop.mapred.ShuffleHandler</value>
  13. </property>
  14. <property>
  15. <description>Classpath for typical applications.</description>
  16. <name>yarn.application.classpath</name>
  17. <value>
  18. $HADOOP_CONF_DIR,
  19. $HADOOP_COMMON_HOME/*,$HADOOP_COMMON_HOME/lib/*,
  20. $HADOOP_HDFS_HOME/*,$HADOOP_HDFS_HOME/lib/*,
  21. $HADOOP_MAPRED_HOME/*,$HADOOP_MAPRED_HOME/lib/*,
  22. $HADOOP_YARN_HOME/*,$HADOOP_YARN_HOME/lib/*
  23. </value>
  24. </property>
  25. </configuration>

注意:

  • yarn.nodemanager.aux-services 的值在 cdh4 中应该为 mapreduce.shuffle,并配置参数yarn.nodemanager.aux-services.mapreduce.shuffle.class值为 org.apache.hadoop.mapred.ShuffleHandler ,在cdh5之后中为mapreduce_shuffle,这时候请配置yarn.nodemanager.aux-services.mapreduce_shuffle.class参数
  • 这里配置了 yarn.application.classpath ,需要设置一些喜欢环境变量:
  1. export HADOOP_HOME=/usr/lib/hadoop
  2. export HIVE_HOME=/usr/lib/hive
  3. export HBASE_HOME=/usr/lib/hbase
  4. export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
  5. export HADOOP_COMMON_HOME=${HADOOP_HOME}
  6. export HADOOP_HDFS_HOME=/usr/lib/hadoop-hdfs
  7. export HADOOP_MAPRED_HOME=/usr/lib/hadoop-mapreduce
  8. export HADOOP_YARN_HOME=/usr/lib/hadoop-yarn
  9. export HADOOP_LIBEXEC_DIR=${HADOOP_HOME}/libexec

在hadoop中默认的文件路径以及权限要求如下:

  1. 目录 所有者 权限 默认路径
  2. yarn.nodemanager.local-dirs yarn:yarn drwxr-xr-x ${hadoop.tmp.dir}/nm-local-dir
  3. yarn.nodemanager.log-dirs yarn:yarn drwxr-xr-x ${yarn.log.dir}/userlogs
  4. yarn.nodemanager.remote-app-log-dir hdfs:hadoop /tmp/logs
  • ${yarn.log.dir}默认值为:/var/log/hadoop-yarn/userlogs,这是本地目录。
  • /tmp/logs为hdfs上的地址,运行时自动创建

在nodemanager节点cdh2、cdh3创建 yarn.nodemanager.local-dirsyarn.nodemanager.log-dirs 参数对应的目录:

  1. mkdir -p /var/hadoop/nm-local-dir
  2. chown -R yarn:yarn /var/hadoop/nm-local-dir

3、在 /etc/hadoop/conf/mapred-site.xml 中配置 MapReduce History Server:

  1. <property>
  2. <name>mapreduce.jobhistory.address</name>
  3. <value>cdh1:10020</value>
  4. </property>
  5. <property>
  6. <name>mapreduce.jobhistory.webapp.address</name>
  7. <value>cdh1:19888</value>
  8. </property>

4、此外,确保 mapred、yarn 用户能够使用代理,在 /etc/hadoop/conf/core-site.xml 中添加如下参数:

  1. <property>
  2. <name>hadoop.proxyuser.mapred.groups</name>
  3. <value>*</value>
  4. </property>
  5. <property>
  6. <name>hadoop.proxyuser.mapred.hosts</name>
  7. <value>*</value>
  8. </property>
  9. <property>
  10. <name>hadoop.proxyuser.yarn.groups</name>
  11. <value>*</value>
  12. </property>
  13. <property>
  14. <name>hadoop.proxyuser.yarn.hosts</name>
  15. <value>*</value>
  16. </property>

5、开启日志聚集
日志聚集概念:应用运行完成以后,将日志信息上传到HDFS系统上。

  1. <!-- 日志聚集功能使能 -->
  2. <property>
  3. <name>yarn.log-aggregation-enable</name>
  4. <value>true</value>
  5. </property>
  6. <!-- 日志保留时间设置7天 -->
  7. <property>
  8. <name>yarn.log-aggregation.retain-seconds</name>
  9. <value>604800</value>
  10. </property>

查看日志 http://cdh1:19888/jobhistory

3.4 验证 HDFS 结构:

  1. sudo -u hdfs hadoop fs -ls -R /

你应该看到如下结构:

  1. drwxrwxrwt - hdfs hadoop 0 2019-07-03 23:40 /tmp

3.5 同步配置文件

同步配置文件到整个集群:

  1. scp -r /etc/hadoop/conf root@cdh2:/etc/hadoop/
  2. scp -r /etc/hadoop/conf root@cdh3:/etc/hadoop/

3.6 启动服务

在 cdh1 节点启动 resourceManager

  1. /etc/init.d/hadoop-yarn-resourcemanager start

在 cdh1 节点启动 mapred-historyserver :

  1. /etc/init.d/hadoop-mapreduce-historyserver start

在 cdh2、cdh3 节点启动nodeManager :

  1. /etc/init.d/hadoop-yarn-nodemanager start

为每个 MapReduce 用户创建主目录,比如说 hive 用户或者当前用户:

  1. sudo -u hdfs hadoop fs -mkdir /user/$USER
  2. sudo -u hdfs hadoop fs -chown $USER /user/$USER

3.7 测试

通过 http://cdh1:8088/ 可以访问 Yarn 的管理页面,通过 http://cdh1:19888/ 可以访问 JobHistory 的管理页面,查看在线的节点:http://cdh1:8088/cluster/nodes
运行下面的测试程序,看是否报错:

  1. # Find how many jars name ending with examples you have inside location /usr/lib/
  2. find /usr/lib/ -name "*hadoop*examples*.jar"
  3. # To list all the class name inside jar
  4. find /usr/lib/ -name "hadoop*examples.jar" | xargs -0 -I '{}' sh -c 'jar tf {}'
  5. # To search for specific class name inside jar
  6. find /usr/lib/ -name "hadoop*examples.jar" | xargs -0 -I '{}' sh -c 'jar tf {}' | grep -i wordcount.class
  7. # 运行 randomwriter 例子
  8. sudo -u hdfs hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar randomwriter out

注意:在虚拟机上,内存不足,跑不出来结果。

3.8 最后的配置文件

/etc/hadoop/conf/yarn-site.xml:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <configuration>
  3. <property>
  4. <name>yarn.resourcemanager.hostname</name>
  5. <value>cdh1</value>
  6. </property>
  7. <property>
  8. <name>yarn.nodemanager.aux-services</name>
  9. <value>mapreduce_shuffle</value>
  10. </property>
  11. <property>
  12. <name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>
  13. <value>org.apache.hadoop.mapred.ShuffleHandler</value>
  14. </property>
  15. <property>
  16. <name>yarn.log-aggregation-enable</name>
  17. <value>true</value>
  18. </property>
  19. <property>
  20. <name>yarn.app.mapreduce.am.staging-dir</name>
  21. <value>/user</value>
  22. </property>
  23. <property>
  24. <name>yarn.application.classpath</name>
  25. <value>
  26. $HADOOP_CONF_DIR,
  27. $HADOOP_COMMON_HOME/*,$HADOOP_COMMON_HOME/lib/*,
  28. $HADOOP_HDFS_HOME/*,$HADOOP_HDFS_HOME/lib/*,
  29. $HADOOP_MAPRED_HOME/*,$HADOOP_MAPRED_HOME/lib/*,
  30. $HADOOP_YARN_HOME/*,$HADOOP_YARN_HOME/lib/*
  31. </value>
  32. </property>
  33. </configuration>

/etc/hadoop/conf/mapred-site.xml:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <configuration>
  3. <property>
  4. <name>mapreduce.framework.name</name>
  5. <value>yarn</value>
  6. </property>
  7. <property>
  8. <name>mapreduce.jobhistory.address</name>
  9. <value>cdh1:10020</value>
  10. </property>
  11. <property>
  12. <name>mapreduce.jobhistory.webapp.address</name>
  13. <value>cdh1:19888</value>
  14. </property>
  15. </configuration>

3.9 YARN默认配置

ResourceManager

| 选项 | 默认值 | | —- | —- |

| yarn.resourcemanager.address | ${yarn.resourcemanager.hostname}:8032 |

| yarn.resourcemanager.scheduler.address | ${yarn.resourcemanager.hostname}:8030 |

| yarn.resourcemanager.resource-tracker.address | ${yarn.resourcemanager.hostname}:8031 |

| yarn.resourcemanager.admin.address | ${yarn.resourcemanager.hostname}:8033 |

| yarn.resourcemanager.webapp.address | ${yarn.resourcemanager.hostname}:8088 |

| yarn.resourcemanager.webapp.https.address | ${yarn.resourcemanager.hostname}:8090 |

| yarn.resourcemanager.scheduler.class | org.apache.hadoop.yarn.server.resourcemanager
.scheduler.capacity.CapacityScheduler |

| yarn.resourcemanager.resource-tracker.client.thread-count | 50 |

| yarn.scheduler.minimum-allocation-mb | 1024 |

| yarn.scheduler.maximum-allocation-mb | 8192 |

| yarn.scheduler.minimum-allocation-vcores | 1 |

| yarn.scheduler.maximum-allocation-vcores | 32 |

| yarn.resourcemanager.nodes.include-path | 空 |

| yarn.resourcemanager.nodes.exclude-path | 空 |

| yarn.resourcemanager.nodemanagers.heartbeat-interval-ms | 1000(毫秒) |

NodeManager

| 选项 | 默认值 | | —- | —- |

| yarn.nodemanager.resource.memory-mb | 2.1 |

| yarn.nodemanager.resource.cpu-vcores | 8 |

| yarn.nodemanager.local-dirs | ${hadoop.tmp.dir}/nm-local-dir |

| yarn.nodemanager.log.retain-seconds | 10800(3小时) |

| yarn.nodemanager.aux-services | |

| yarn.nodemanager.aux-services.mapreduce_shuffle.class | |

| yarn.nodemanager.localizer.address | ${yarn.nodemanager.hostname}:8040 |

| yarn.nodemanager.webapp.address | ${yarn.nodemanager.hostname}:8042 |

| yarn.nodemanager.log-dirs | ${yarn.log.dir}/userlogs |

| yarn.nodemanager.remote-app-log-dir | /tmp/logs |

ResourceManager HA

| 选项 | 默认值 | | —- | —- |

| yarn.resourcemanager.ha.enabled | false |

| yarn.resourcemanager.cluster-id | |

| yarn.resourcemanager.ha.id | |

| yarn.resourcemanager.ha.rm-ids | |

| yarn.resourcemanager.ha.automatic-failover.enabled | true |

| yarn.resourcemanager.ha.automatic-failover.embedded | true |

| yarn.resourcemanager.hostname.xxx | |

| yarn.resourcemanager.recovery.enabled | false |

| yarn.resourcemanager.zk-address | |

| yarn.resourcemanager.store.class | org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore |

| yarn.client.failover-proxy-provider | org.apache.hadoop.yarn.client.ConfiguredRMFailoverProxyProvider |

| yarn.client.failover-max-attempts | (yarn.resourcemanager.connect.max-wait.ms) |

| yarn.resourcemanager.ha.automatic-failover.zk-base-path | /yarn-leader-election |

| yarn.client.failover-sleep-max-ms | (yarn.resourcemanager.connect.retry-interval.ms) |

| yarn.client.failover-retries | 0 |

| yarn.client.failover-retries-on-socket-timeouts | 0 |

Timeline Server

| 选项 | 默认值 | | —- | —- |

| yarn.timeline-service.enabled | false |

| yarn.resourcemanager.system-metrics-publisher.enabled | false |

| yarn.timeline-service.generic-application-history.enabled | false |

| yarn.timeline-service.hostname | 0.0.0.0 |

| yarn.timeline-service.address | ${yarn.timeline-service.hostname}:10200 |

| yarn.timeline-service.webapp.address | {yarn.timeline-service.hostname}:8188 |

| yarn.timeline-service.webapp.https.address | ${yarn.timeline-service.hostname}:8190 |

| yarn.timeline-service.leveldb-timeline-store.path | ${hadoop.tmp.dir}/yarn/timeline |

sharedcache

| 选项 | 默认值 | | —- | —- |

| yarn.sharedcache.enabled | false |

| yarn.sharedcache.root-dir | /sharedcache |

| yarn.sharedcache.admin.address | 0.0.0.0:8047 |

| yarn.sharedcache.webapp.address | 0.0.0.0:8788 |

| yarn.sharedcache.uploader.server.address | 0.0.0.0:8046 |

| yarn.sharedcache.client-server.address | 0.0.0.0:8045 |

4. 安装 Zookeeper

Zookeeper 至少需要3个节点,并且节点数要求是基数,这里在所有节点上都安装 Zookeeper。

4.1 安装

在每个节点上安装zookeeper:

  1. yum install zookeeper-server -y

4.2 修改配置文件

设置 zookeeper 配置 /etc/zookeeper/conf/zoo.cfg

  1. maxClientCnxns=50
  2. tickTime=2000
  3. initLimit=10
  4. syncLimit=5
  5. dataDir=/var/lib/zookeeper
  6. clientPort=2181
  7. server.1=cdh1:2888:3888
  8. server.2=cdh3:2888:3888
  9. server.3=cdh3:2888:3888

4.3 同步配置文件
将配置文件同步到其他节点:

  1. scp -r /etc/zookeeper/conf root@cdh2:/etc/zookeeper/
  2. scp -r /etc/zookeeper/conf root@cdh3:/etc/zookeeper/

4.4 初始化并启动服务

在每个节点上初始化并启动 zookeeper,注意 n 的值需要和 zoo.cfg 中的编号一致。
在 cdh1 节点运行:

  1. service zookeeper-server init --myid=1
  2. service zookeeper-server start

在 cdh2 节点运行:

  1. service zookeeper-server init --myid=2
  2. service zookeeper-server start

在 cdh3 节点运行:

  1. service zookeeper-server init --myid=3
  2. service zookeeper-server start

4.5 测试

通过下面命令测试是否启动成功:

  1. zookeeper-client -server cdh1:2181

5. 安装 HBase

HBase 依赖 ntp 服务,故需要提前安装好 ntp。

5.1 安装前设置

修改 dfs.datanode.max.xcievers,在 hdfs-site.xml 中修改该参数值,将该值调整到较大的值:

  1. <property>
  2. <name>dfs.datanode.max.xcievers</name>
  3. <value>8192</value>
  4. </property>

5.2 安装

在每个节点上安装 master 和 regionserver,如果需要你可以安装 hbase-rest、hbase-solr-indexer、hbase-thrift

  1. yum install hbase-master hbase-regionserver -y

5.3 修改配置文件

修改 hbase-site.xml文件,关键几个参数及含义如下:

  • hbase.distributed:是否为分布式模式
  • hbase.rootdir:HBase在hdfs上的目录路径
  • hbase.tmp.dir:本地临时目录
  • hbase.zookeeper.quorum:zookeeper集群地址,逗号分隔
  • hbase.hregion.max.filesize:hregion文件最大大小
  • hbase.hregion.memstore.flush.size:memstore文件最大大小

默认配置参数,请参考:https://hbase.apache.org/2.1/book.html#hbase_default_configurations
另外,在CDH5中建议关掉Checksums(见Upgrading HBase)以提高性能,最后的配置如下:

  1. <configuration>
  2. <property>
  3. <name>hbase.cluster.distributed</name>
  4. <value>true</value>
  5. </property>
  6. <property>
  7. <name>hbase.rootdir</name>
  8. <value>hdfs://cdh1:8020/hbase</value>
  9. </property>
  10. <property>
  11. <name>hbase.tmp.dir</name>
  12. <value>/var/hbase</value>
  13. </property>
  14. </configuration>

在 hdfs 中创建 /hbase 目录

  1. sudo -u hdfs hadoop fs -mkdir /hbase
  2. sudo -u hdfs hadoop fs -chown hbase:hadoop /hbase

设置 crontab 定时删除日志:

  1. crontab -e
  2. * 10 * * * cd /var/log/hbase/; rm -rf `ls /var/log/hbase/|grep -P 'hbase\-hbase\-.+\.log\.[0-9]'\`>> /dev/null &

5.4 同步配置文件

将配置文件同步到其他节点:

  1. scp -r /etc/hbase/conf root@cdh2:/etc/hbase/
  2. scp -r /etc/hbase/conf root@cdh3:/etc/hbase/

5.5 创建本地目录

在 hbase-site.xml 配置文件中配置了 hbase.tmp.dir 值为 /data/hbase,现在需要在每个 hbase 节点创建该目录并设置权限:

  1. mkdir -p /var/hbase
  2. chown -R hbase:hbase /var/hbase
  3. chmod -R 700 /var/hbase

5.6 启动HBase

  1. for x in `ls /etc/init.d/|grep hbase` ; do service $x start ; done

5.7 测试

通过 http://cdh2:16030/ 可以访问 RegionServer 页面,然后通过该页面可以知道哪个节点为 Master,然后再通过 16010 端口访问 Master 管理界面。
在安装有HBase的节点如cdh2运行下面命令:

  1. hbase shell

6. 安装hive

在一个 NameNode 节点上安装 hive:

  1. yum install hive hive-metastore hive-server2 hive-jdbc hive-hbase -y

在其他 DataNode 上安装:

  1. yum install hive hive-server2 hive-jdbc hive-hbase -y

安装postgresql

这里使用 postgresq l数据库来存储元数据,如果你想使用 mysql 数据库,请参考下文。手动安装、配置 postgresql 数据库,请参考 手动安装Cloudera Hive CDH
yum 方式安装:

  1. yum install postgresql-server postgresql-jdbc -y
  2. ln -s /usr/share/java/postgresql-jdbc.jar /usr/lib/hive/lib/postgresql-jdbc.jar

配置开启启动,并初始化数据库:

  1. chkconfig postgresql on
  2. service postgresql initdb

修改配置文件/var/lib/pgsql/data/postgresql.conf:

  1. sed -i "s/max_connections = 100/max_connections = 600/" /var/lib/pgsql/data/postgresql.conf
  2. sed -i "s/#listen_addresses = 'localhost'/listen_addresses = '*'/" /var/lib/pgsql/data/postgresql.conf
  3. sed -i "s/shared_buffers = 32MB/shared_buffers = 256MB/" /var/lib/pgsql/data/postgresql.conf
  4. sed -i "s/#standard_conforming_strings = on/standard_conforming_strings = off/" /var/lib/pgsql/data/postgresql.conf

修改 /var/lib/pgsql/data/pg_hba.conf:

  1. sed -i "s/127.0.0.1\/32/0.0.0.0\/0/" /var/lib/pgsql/data/pg_hba.conf
  2. sed -i "s/ident/trust/" /var/lib/pgsql/data/pg_hba.conf
  3. sed -i "s/peer/trust/" /var/lib/pgsql/data/pg_hba.conf

创建数据库metastore和用户hive,设置密码为hive:

  1. su -c "cd ; /usr/bin/pg_ctl start -w -m fast -D /var/lib/pgsql/data" postgres
  2. su -c "cd ; /usr/bin/psql --command \"create user hive with password 'hive'; \" " postgres
  3. su -c "cd ; /usr/bin/psql --command \"drop database metastore;\" " postgres
  4. su -c "cd ; /usr/bin/psql --command \"CREATE DATABASE metastore owner=hive;\" " postgres
  5. su -c "cd ; /usr/bin/psql --command \"GRANT ALL privileges ON DATABASE metastore TO hive;\" " postgres
  6. su -c "cd ; /usr/bin/pg_ctl restart -w -m fast -D /var/lib/pgsql/data" postgres

重启数据库:

  1. su -c "cd ; /usr/bin/pg_ctl restart -w -m fast -D /var/lib/pgsql/data" postgres

初始化数据库,这里使用的是最新的脚本:

  1. $ ls /usr/lib/hive/scripts/metastore/upgrade/postgres/hive-schema-* |tail -n 1
  2. /usr/lib/hive/scripts/metastore/upgrade/postgres/hive-schema-2.1.1.postgres.sql
  3. $ su -c "cd ; /usr/bin/psql -U hive -d metastore -f `ls /usr/lib/hive/scripts/metastore/upgrade/postgres/hive-schema-* |tail -n 1`" postgres

这时候的hive-site.xml文件内容如下:

  1. <configuration>
  2. <property>
  3. <name>javax.jdo.option.ConnectionURL</name>
  4. <value>jdbc:postgresql://cdh1/hive</value>
  5. </property>
  6. <property>
  7. <name>javax.jdo.option.ConnectionDriverName</name>
  8. <value>org.postgresql.Driver</value>
  9. </property>
  10. <property>
  11. <name>javax.jdo.option.ConnectionUserName</name>
  12. <value>hive</value>
  13. </property>
  14. <property>
  15. <name>javax.jdo.option.ConnectionPassword</name>
  16. <value>hive</value>
  17. </property>
  18. <property>
  19. <name>datanucleus.autoCreateSchema</name>
  20. <value>false</value>
  21. </property>
  22. <property>
  23. <name>mapreduce.framework.name</name>
  24. <value>yarn</value>
  25. </property>
  26. <property>
  27. <name>yarn.resourcemanager.resource-tracker.address</name>
  28. <value>cdh1:8031</value>
  29. </property>
  30. <property>
  31. <name>hive.auto.convert.join</name>
  32. <value>true</value>
  33. </property>
  34. <property>
  35. <name>hive.metastore.schema.verification</name>
  36. <value>true</value>
  37. </property>
  38. <property>
  39. <name>hive.metastore.warehouse.dir</name>
  40. <value>/user/hive/warehouse</value>
  41. </property>
  42. <property>
  43. <name>hive.warehouse.subdir.inherit.perms</name>
  44. <value>true</value>
  45. </property>
  46. <property>
  47. <name>hive.metastore.uris</name>
  48. <value>thrift://cdh1:9083</value>
  49. </property>
  50. <property>
  51. <name>hive.support.concurrency</name>
  52. <value>true</value>
  53. </property>
  54. <property>
  55. <name>hive.zookeeper.quorum</name>
  56. <value>cdh1,cdh2,cdh3</value>
  57. </property>
  58. </configuration>

默认情况下,hive-server和 hive-server2 的 thrift 端口都为10000,如果要修改 hive-server2 thrift 端口,请修改 hive.server2.thrift.port 参数的值。
如果要设置运行 hive 的用户为连接的用户而不是启动用户,则添加:

  1. <property>
  2. <name>hive.server2.enable.impersonation</name>
  3. <value>true</value>
  4. </property>

并在 core-site.xml 中添加:

  1. <property>
  2. <name>hadoop.proxyuser.hive.hosts</name>
  3. <value>*</value>
  4. </property>
  5. <property>
  6. <name>hadoop.proxyuser.hive.groups</name>
  7. <value>*</value>
  8. </property>

安装mysql

yum方式安装mysql以及jdbc驱动:

  1. yum install mysql mysql-devel mysql-server mysql-libs -y
  2. yum install mysql-connector-java
  3. ln -s /usr/share/java/mysql-connector-java.jar /usr/lib/hive/lib/mysql-connector-java.jar

创建数据库和用户,并设置密码为hive:

  1. mysql -e "
  2. CREATE DATABASE hive;
  3. USE hive;
  4. CREATE USER 'hive'@'cdh1' IDENTIFIED BY 'hive';
  5. GRANT ALL PRIVILEGES ON metastore.* TO 'hive'@'cdh1';
  6. FLUSH PRIVILEGES;
  7. "

如果是第一次安装,则初始化 hive 的元数据库:

  1. /usr/lib/hive/bin/schematool --dbType mysql --initSchema

如果是更新,则执行:

  1. /usr/lib/hive/bin/schematool --dbType mysql --upgradeSchema

配置开启启动并启动数据库:

  1. chkconfig mysqld on
  2. service mysqld start

修改 hive-site.xml 文件中以下内容:

  1. <property>
  2. <name>javax.jdo.option.ConnectionURL</name>
  3. <value>jdbc:mysql://cdh1:3306/metastore?useUnicode=true&amp;characterEncoding=UTF-8</value>
  4. </property>
  5. <property>
  6. <name>javax.jdo.option.ConnectionDriverName</name>
  7. <value>com.mysql.jdbc.Driver</value>
  8. </property>
  9. <property>
  10. <name>javax.jdo.option.ConnectionUserName</name>
  11. <value>hive</value>
  12. </property>
  13. <property>
  14. <name>javax.jdo.option.ConnectionPassword</name>
  15. <value>hive</value>
  16. </property>

配置hive

修改/etc/hadoop/conf/hadoop-env.sh,添加环境变量 HADOOP_MAPRED_HOME,如果不添加,则当你使用 yarn 运行 mapreduce 时候会出现 UNKOWN RPC TYPE 的异常

  1. export HADOOP_MAPRED_HOME=/usr/lib/hadoop-mapreduce

在 hdfs 中创建 hive 数据仓库目录:

  • hive 的数据仓库在 hdfs 中默认为 /user/hive/warehouse,建议修改其访问权限为 1777,以便其他所有用户都可以创建、访问表,但不能删除不属于他的表。
  • 每一个查询 hive 的用户都必须有一个 hdfs 的 home 目录( /user 目录下,如 root 用户的为 /user/root)
  • hive 所在节点的 /tmp 必须是 world-writable 权限的。

创建目录并设置权限:

  1. sudo -u hdfs hadoop fs -mkdir /user/hive
  2. sudo -u hdfs hadoop fs -chown hive /user/hive
  3. sudo -u hdfs hadoop fs -mkdir /user/hive/warehouse
  4. sudo -u hdfs hadoop fs -chmod 1777 /user/hive/warehouse
  5. sudo -u hdfs hadoop fs -chown hive /user/hive/warehouse

启动hive-server和metastore:

  1. service hive-metastore start
  2. service hive-server start
  3. service hive-server2 start

测试

  1. hive -e 'create table t(id int);'
  2. hive -e 'select * from t limit 2;'
  3. hive -e 'select id from t;'

访问beeline:

  1. beeline
  2. beeline> !connect jdbc:hive2://cdh1:10000 hive hive org.apache.hive.jdbc.HiveDriver
  3. Connecting to jdbc:hive2://cdh1:10000
  4. Connected to: Apache Hive (version 2.1.1-cdh6.2.0)
  5. Driver: Hive JDBC (version 2.1.1-cdh6.2.0)
  6. Transaction isolation: TRANSACTION_REPEATABLE_READ

注意:core-site.xml中需要加以下配置:

  1. <property>
  2. <name>hadoop.proxyuser.hive.hosts</name>
  3. <value>*</value>
  4. </property>
  5. <property>
  6. <name>hadoop.proxyuser.hive.groups</name>
  7. <value>*</value>
  8. </property>

与hbase集成

先安装 hive-hbase:

  1. yum install hive-hbase -y

如果你是使用的 cdh4,则需要在 hive shell 里执行以下命令添加 jar:

  1. ADD JAR /usr/lib/hive/lib/zookeeper.jar;
  2. ADD JAR /usr/lib/hive/lib/hbase.jar;
  3. ADD JAR /usr/lib/hive/lib/hive-hbase-handler-<hive_version>.jar
  4. # guava 包的版本以实际版本为准。
  5. ADD JAR /usr/lib/hive/lib/guava-11.0.2.jar;

如果你是使用的 cdh5,则需要在 hive shell 里执行以下命令添加 jar:

  1. ADD JAR /usr/lib/hive/lib/zookeeper.jar;
  2. ADD JAR /usr/lib/hive/lib/hive-hbase-handler.jar;
  3. ADD JAR /usr/lib/hbase/lib/guava-12.0.1.jar;
  4. ADD JAR /usr/lib/hbase/hbase-client.jar;
  5. ADD JAR /usr/lib/hbase/hbase-common.jar;
  6. ADD JAR /usr/lib/hbase/hbase-hadoop-compat.jar;
  7. ADD JAR /usr/lib/hbase/hbase-hadoop2-compat.jar;
  8. ADD JAR /usr/lib/hbase/hbase-protocol.jar;
  9. ADD JAR /usr/lib/hbase/hbase-server.jar;

以上你也可以在 hive-site.xml 中通过 hive.aux.jars.path 参数来配置,或者你也可以在 hive-env.sh 中通过 export HIVE_AUX_JARS_PATH= 来设置。

7. 遇到的问题

安装hadoop过程中需要注意以下几点:

  1. 每个节点配置hosts
  1. 每个节点配置时钟同步
  1. 如果没有特殊要求,关闭防火墙
  1. hadoop需要在/tmp目录下存放一些日志和临时文件,要求/tmp目录权限必须为1777

使用intel的hadoop发行版IDH过程遇到问题:

1、 IDH集群中需要配置管理节点到集群各节点的无密码登录,公钥文件存放路径为/etc/intelcloud目录下,文件名称为idh-id_rsa
如果在管理界面发现不能启动/停止hadoop组件的进程,请检查ssh无密码登录是否有问题。

  1. ssh -i /etc/intelcloud/idh-id_rsa nodeX

如果存在问题,请重新配置无密码登录:

  1. scp -i /etc/intelcloud/idh-id_rsa nodeX

2、 IDH使用puppt和shell脚本来管理hadoop集群,shell脚本中有一处调用puppt的地方存在问题,详细说明待整理!!

使用CDH4.3.0的hadoop(通过rpm安装)过程中发现如下问题:

说明:以下问题不局限于CDH的hadoop版本。

1、 在hive运行过程中会打印如下日志

  1. Starting Job = job_1374551537478_0001, Tracking URL = http://june-fedora:8088/proxy/application_1374551537478_0001/
  2. Kill Command = /usr/lib/hadoop/bin/hadoop job -kill job_1374551537478_0001

通过上面的kill command可以killjob,但是运行过程中发现提示错误,错误原因:HADOOP_LIBEXEC_DIR未做设置
解决方法:在hadoop-env.sh中添加如下代码

  1. export HADOOP_LIBEXEC_DIR=$HADOOP_COMMON_HOME/libexec

2、 查看java进程中发现,JVM参数中-Xmx重复出现
解决办法:/etc/hadoop/conf/hadoop-env.sh去掉第二行。

  1. export HADOOP_OPTS="-Djava.net.preferIPv4Stack=true $HADOOP_OPTS"

3、 hive中mapreduce运行为本地模式,而不是远程模式
解决办法:/etc/hadoop/conf/hadoop-env.sh设置HADOOP_MAPRED_HOME变量

  1. export HADOOP_MAPRED_HOME=/usr/lib/hadoop-mapreduce

4、 如何设置hive的jvm启动参数
hive脚本运行顺序:

  1. hive-->hive-config.sh-->hive-env.sh-->hadoop-config.sh-->hadoop-env.sh

故如果hadoop-env.sh中设置了HADOOP_HEAPSIZE,则hive-env.sh中设置的无效
5、如何设置JOB_HISTORYSERVER的jvm参数
/etc/hadoop/conf/hadoop-env.sh添加如下代码:

  1. export HADOOP_JOB_HISTORYSERVER_HEAPSIZE=256

8. 参考文章