hadoop2.6.4完全分布式集群安装(一)实现基本集群环境

1    总体说明

笔记本:i5第六代,16G内存,256G固态硬盘

使用VirtualBox 5.0.22建立3台虚拟机,实现完全分布式安装。

建立纯hadoop的集群环境,实现所有hadoop集群的各种基本功能,包括分布式存储(HDFS)和分布式计算(MR)。

2    主机规化

主机名

IP

用途

master

192.168.56.105

Namenode,jobtracker

slave1

192.168.56.106

Secondrynamenode,datanode,tasktracker

slave2

192.168.56.107

Datanode,tasktracker

 

3    目录规化

组件

目录

说明

JDK

/usr/java/jdk1.8.0_92

ln -s /usr/java/jdk1.8.0_92 /usr/java/default

集群各组件安装根目录

/hadoop

Hadoop,Hbase,Zookeeper等根目录

Hadoop

/hadoop/hadoop-2.6.4

ln -s /hadoop/hadoop-2.6.4 /Hadoop/hadoop

Hadoop各输出目录的根

/var/hadoop

建立name(namenode),data(datanoe),logs(运行日志)

 

 

 

 

4    端口规化

端口

说明

9000

fs.defaultFS,如:hdfs://master:9000

9000

dfs.namenode.rpc-address,DataNode会连接这个端口。可以不设置

50070

dfs.namenode.http-address

50470

dfs.namenode.https-address

50100

dfs.namenode.backup.address

50105

dfs.namenode.backup.http-address

50090

dfs.namenode.secondary.http-address,如:hdfs://slave1:50090

50091

dfs.namenode.secondary.https-address,如:hdfs://slave1:50091

50020

dfs.datanode.ipc.address

50075

dfs.datanode.http.address

50475

dfs.datanode.https.address

50010

dfs.datanode.address,DataNode的数据传输端口

8480

dfs.journalnode.rpc-address

8481

dfs.journalnode.https-address

8032

yarn.resourcemanager.address

8088

yarn.resourcemanager.webapp.address,YARN的http端口

8090

yarn.resourcemanager.webapp.https.address

8030

yarn.resourcemanager.scheduler.address

8031

yarn.resourcemanager.resource-tracker.address

8033

yarn.resourcemanager.admin.address

8042

yarn.nodemanager.webapp.address

8040

yarn.nodemanager.localizer.address

8188

yarn.timeline-service.webapp.address

10020

mapreduce.jobhistory.address

19888

mapreduce.jobhistory.webapp.address

2888

ZooKeeper,如果是Leader,用来监听Follower的连接

3888

ZooKeeper,用于Leader选举

2181

ZooKeeper,用来监听客户端的连接

60010

hbase.master.info.port,HMaster的http端口

60000

hbase.master.port,HMaster的RPC端口

60030

hbase.regionserver.info.port,HRegionServer的http端口

60020

hbase.regionserver.port,HRegionServer的RPC端口

8080

hbase.rest.port,HBaseRESTserver的端口

10000

hive.server2.thrift.port

9083

hive.metastore.uris

 

5    操作系统配置

5.1   OS安装

l  使用CentOS mini版

l  磁盘划分:

/boot   500MB ext4 boot partition # 迫使主分区

swap    2GB     swap # 与物理内存一样大

/           剩余空间 ext4 # 迫使主分区

/data1 sda所有空间 ext4

/data2 sdb所有空间 ext4

l  安装软件:sysstat , httpd, tftp-server, ntp

启动sysstat :/etc/init.d/sysstat start

设置sysstat自启动:checkfig sysstat on

安装pssh

wget https://pypi.python.org/packages/source/p/pssh/pssh-2.3.1.tar.gz

tar zxf pssh-2.3.1.tar.gz

cd pssh-2.3.1

python setup.py install

pssh   多主机并行运行命令

pscp   传输文件到多个hosts,他的特性和scp差不多

pslurp   从多台远程机器拷贝文件

pnuke   kill远程机器的进程

pslurp   从远程主机考本文件到本地

prsync   使用rsync协议从本地计算机同步到远程主机

5.2   配置SSH免密登陆

原理:就是我把我的公钥放到你的authorized_keys里面,然后我就可以ssh无密码登录你了

5.2.1  配置规则

u  NameNode 能免密码登录所有的 DataNode

u  SecondaryNameNode 能免密码登录所有的 DataNode

u  NameNode 能免密码登录自己

u  SecondaryNameNode 能免密码登录自己

u  NameNode 能免密码登录 SecondaryNameNode

u  SecondaryNameNode 能免密码登录 NameNode

u  DataNode 能免密码登录自己

u  DataNode 不需要配置免密码登录 NameNode、SecondaryNameNode和其它 DataNode。

5.2.2  配置步骤

l  在master(NameNode)上执行:

cd ~

ssh-keygen -t rsa # 一路回车。

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

ssh localhost # 验证本机无密码登陆

ssh master # 验证本机无密码登陆

for ip in `seq 1 2`; do scp ~/.ssh/authorized_keys root@slave$ip:~/keys.master;done

l  在slave1(SecondaryNameNode, DataNode)上执行:

cd ~

ssh-keygen -t rsa

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

ssh localhost # 验证本机无密码登陆

ssh slave1 # 验证本机无密码登陆

cat ~/keys.master >> ~/.ssh/authorized_keys # 实现master免密码登陆slave1

scp ~/.ssh/id_rsa.pub root@slave2:~/keys.slave1

scp ~/.ssh/id_rsa.pub root@master:~/keys.slave1

master主机上执行:cat ~/keys.slave1 >> ~/.ssh/authorized_keys

l  在slave2(DataNode)上执行:

cd ~

ssh-keygen -t rsa

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

ssh localhost # 验证本机无密码登陆

ssh slave2 # 验证本机无密码登陆

cat ~/keys.master >> ~/.ssh/authorized_keys


cat ~/keys.slave1 >> ~/.ssh/authorized_keys

l  免密码登陆验证

master(NN)登录所有节点

slave1(SNN)登录所有的 DataNode(slave2)

slave1(SNN)登录NameNode(master)

5.3   系统配置

每台主机执行以下操作:

1.  修改hosts,增加各个主机

echo "# cluster hosts" >> /etc/hosts

echo "192.168.56.105 master" >>/etc/hosts

echo "192.168.56.106 slave1" >>/etc/hosts

echo "192.168.56.107 slave2" >>/etc/hosts

cat /etc/hosts

for ip in `seq 1 2`; do scp /etc/hostsroot@slave$ip:/etc; done

 

2.  定义其他节点主机列表文件

cd ~

vi hdp-other-hosts

slave1

slave2

该文件是为了使用pssh进行批量操作用。文件内容为每行一个主机名字。

    之后,可使用类似如下命令从master主机上批量在其他主机上执行命令:

    例如:pssh -h hdp-other-hosts "mkdir -p /hadoop /test"

3.  修改OS参数,如关闭防火墙,增加打开文件数等

l  修改主机名

cat /etc/sysconfig/network #看看主机名字是否正确,不对则修改

service network restart

l  # 关闭iptables.

service iptables stop

service iptables status

chkconfig iptables off

chkconfig --list | grep iptables

pssh -h hdp-other-hosts "service iptables stop;chkconfig iptables off"

# 两个命令中间用分号;以实现连续执行,即使有错也会继续。

# 如果每个命令被 && 号分隔,那么这些命令会一直执行下去,如果中间有错误的命令存在,则不再执行后面的命令。

l  # 关闭selinux.

vi /etc/selinux/config

  SELINUX=disabled

l  # 关闭透明大页

vi /etc/rc.local

if test -f /sys/kernel/mm/transparent_hugepage/enabled;then

    echo never> /sys/kernel/mm/transparent_hugepage/enabled

fi

if test -f /sys/kernel/mm/transparent_hugepage/defrag;then

    echo never> /sys/kernel/mm/transparent_hugepage/defrag

fi

l  # 让机器尽量使用物理内存。如果设置成0,则意味着只使用物理内存。

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

l  # 最大打开文件数据和最大进程数 limits.conf 每台机器都修改

vi /etc/security/limits.conf # 添加下面的内容

* - nofile 65535

* - nproc 65535

l  # 禁用IPV6

 

l  屏蔽文件访问时间,优化/etc/fstab参数

 

每台机器重启:reboot

l  检查修改效果:

/usr/sbin/sestatus -v # 如果SELinux status参数为enabled即为开启状态

或者使用:getenforce,也可检查SELinux的状态

 

# 如果输出结果为[always]表示透明大页启用了。[never]表示禁用、[madvise]表示

cat /sys/kernel/mm/transparent_hugepage/enabled, defrag

cat /proc/sys/vm/swappiness #应该是10

ulimit -a #应该是65535

 

lsmod | grep -i ipv6 # for check ipv6 off

ifconfig | grep -i inet6 # for check ipv6 off

如果上述2个命令执行的结果没有任何显示,那么说明ipv6已经被完全禁止了。

5.4   建立本地YUM仓库

5.5   NTP配置

l  NTP服务器(master)配置

vi /etc/ntp.conf

server 127.127.1.0

fudge 127.127.1.0 stratum 10

restrict 192.168.56.0 255.255.255.0 nomodifynotrap

 

chkconfig ntpd on

service ntpd start

ntpstat # show : synchronised to local net at stratum 11

l  其他主机配置

vi /etc/ntp.conf

server master

 

service ntpd start

chkconfig ntpd on

crontab -e

*/10 * * * * /usr/sbin/ntpdate -u master&>/var/log/ntpdate-cron.log

# 每10分钟同步一次,'&'开始是为了调试用

10分钟后,各主机上执行:ntpstat,看是否同步了

如果机器重启了,slave上执行ntpstat,显示未同步,运行一次:service ntpd restart,再执行ntpstat,就显示同步了。不知道这个怎么搞好

6    JAVA安装

l  在master上安装JAVA

rpm -ivh jdk8.rpm

echo "export JAVA_HOME=/usr/java/default">> /etc/profile

echo "exportCLASSPATH=.:$JAVA_HOME/lib/tools.jar" >> /etc/profile

echo "export PATH=$JAVA_HOME/bin:$PATH">> /etc/profile

source /etc/profile

gtar cf java.gz /usr/java/

for ip in `seq 1 2`; do scp java.gz root@slave$ip:/usr;done

for ip in `seq 1 2`; do scp /etc/profileroot@slave$ip:/etc; done

rm java.gz

java -version # 检验

l  在其他各主机上安装JAVA

cd /usr

gtar xf java.gz

rm java.gz

java -version # 检验

7       Hadoop安装

7.1       软件安装

mkdir -p /hadoop

gtar xvfhadoop-2.6.4.tar.gz

mv hadoop-2.6.4/hadoop

ln -s/hadoop/hadoop-2.6.4 /hadoop/hadoop

# 解决:util.NativeCodeLoader: Unable toload native-hadoop library for your platform

tar -xvfhadoop-native-64-2.6.0.tar -C /hadoop/hadoop/lib/native

 

vi ~/.bash_profile

exportHADOOP_HOME=/hadoop/hadoop

exportHADOOP_PREFIX=$HADOOP_HOME

exportHADOOP_MAPRED_HOME=${HADOOP_PREFIX}

exportHADOOP_COMMON_HOME=${HADOOP_PREFIX}

exportHADOOP_HDFS_HOME=${HADOOP_PREFIX}

exportYARN_HOME=${HADOOP_PREFIX}

# Native Path

exportHADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_PREFIX}/lib/native

exportHADOOP_OPTS="-Djava.library.path=$HADOOP_PREFIX/lib/native"

 

exportPATH=$HADOOP_PREFIX/bin:$HADOOP_PREFIX/sbin:$JAVA_HOME/bin:$PATH

source~/.bash_profile

# 检查hadoop安装是否成功

hadoop version

hadoop checknative-a

for ip in `seq 1 2`;do scp ~/.bash_profile root@slave$ip:~; done

7.2       配置文件修改

l  使用 master 中的配置文件更新到各主机上

for ip in `seq 1 2`; do scp /hadoop/hadoop/etc/hadoop/*.xml root@slave$ip:/hadoop/hadoop/etc/hadoop/; done

 

7.2.1      配置 hadoop-env.sh

# 明确指定JAVA_HOME

export JAVA_HOME=/usr/java/default

# 明确指定log的存放目录,默认位置是安装目录下的logs文件夹

export HADOOP_LOG_DIR=/var/hadoop/logs

7.2.2      配置 yarn-env.sh

# 明确指定JAVA_HOME

export JAVA_HOME=/usr/java/default

7.2.3      配置 slaves

修改NameNode和SecondaryNameNode上的slaves文件。

把每个slave主机名写进去,每行一个

7.2.4      配置 core-site.xml

属性

涉及范围

fs.defaultFS

hdfs://master:9000

所有节点

hadoop.tmp.dir

/var/hadoop/tmp

所有节点

 

Ø  fs.defaultFS

对于一个新集群来说,唯一必须修改的项是:fs.defaultFS,该项指明了文件系统的访问入口。目的是告知所有的datanode它们的namenode是哪一个从而建立起namenode与各datanode之间的通信

Ø  hadoop.tmp.dir

默认是在${hadoop.tmp.dir}

mkdir -p /var/hadoop/tmp

pssh -h ~/hdp-other-hosts "mkdir -p /var/hadoop/tmp"

7.2.5      配置 hdfs-site.xml

属性

涉及范围

dfs.namenode.rpc-address

master:9000

所有节点

dfs.namenode.secondary.http-address

slave1:50090

NameNode

SecondaryNameNode

dfs.namenode.name.dir

/var/hadoop/name

NameNode

SecondaryNameNode

dfs.datanode.data.dir

/var/hadoop/data

所有DataNode

dfs.replication

2

 

dfs.blocksize

67108864

 

mkdir -p /var/hadoop/name /var/hadoop/data

pssh -h ~/hdp-other-hosts "mkdir -p /var/hadoop/name/var/hadoop/data"

各属性说明:

ü  dfs.namenode.rpc-address// 如果不配置,执行hdfs dfs -ls等任何命令,好像会报 “failed on connection exception”ConnectException Connection refused

ü  dfs.namenode.secondary.http-address //指定secondary namenode结点,若不指定,在使用start-dfs.sh启动时,当前节点将自动成为secondary namenode

ü  dfs.replication  //每一个block的复制份数,默认是3,如果集群datanode结点数量小于3应将该值设置小于或等于datanode的结点数量

ü  dfs.blocksize //默认是268435456(256M)

ü  dfs.namenode.handler.count // 默认是100:MoreNameNode server threads to handle RPCs from large number of DataNodes.

ü  dfs.namenode.name.dir // NameNode 元数据存储目录,可多个,逗号分隔

ü  dfs.datanode.data.dir // DataNode 元数据存储目录,可多个,逗号分隔

ü  dfs.namenode.checkpoint.dir //存放secondary namenode相关数据的文件夹

对于后三项来说,它们的默认值也都是在${hadoop.tmp.dir}之下的子文件夹,可以根据集群的实际情况修改这三个值。比如:把它们改到一个挂载到NFS上的文件夹。

7.2.6      配置 mapred-site.xml

属性

涉及范围

mapreduce.framework.name

yarn

所有节点

mapreduce.jobhistory.address

master:10020

 

mapreduce.jobhistory.webapp.address

master:19888

 

 

唯一一个必须要修改的项是mapreduce.framework.name,该项告诉hadoop使用何种框架执行map-reduce任务

7.2.7      配置 yarn-site.xml

属性

涉及范围

yarn.nodemanager.aux-services

mapreduce_shuffle

所有的 NodeManager

yarn.nodemanager.aux-

services.mapreduce_shuffle.class

org.apache.hadoop.mapred

.ShuffleHandler

 

yarn.resourcemanager.address

master:8032

 

yarn.resourcemanager

.scheduler.address

master:8030

 

yarn.resourcemanager.

resource-tracker.address

master:8031

 

yarn.resourcemanager.admin.address

master:8033

 

yarn.resourcemanager.webapp.address

master:8088

 

yarn.resourcemanager.hostname

master

ResourceManager

NodeManager

yarn.nodemanager.hostname

0.0.0.0(可不配置)

所有的

NodeManager

yarn.nodemanager.resource.memory-mb

不设置(默认:8192)

 

yarn.nodemanager.local-dirs

中间结果存放位置。

应配置多个目录以分摊磁盘IO负载。

默认:

${hadoop.tmp.dir}/nm-local-dir

 

yarn.nodemanager.log-dirs

日志存放地址。配多目录分摊磁盘IO

默认: ${yarn.log.dir}/userlogs

 

yarn.scheduler.minimum-allocation-mb

不设置(默认:1024)

 

yarn.scheduler.maximum-allocation-mb

不设置(默认:8192)

 

注意:对于resourcemanager,可以只设置一个属性:yarn.resourcemanager.hostname。它将代替所有resourcemanager* address的设置,并使用各个默认的端口提供服务

7.2.8      配置各节点

gtar cf hadoop.gz /hadoop/hadoop /hadoop/hadoop-2.6.4

for ip in `seq 1 2`; do scp /hadoop/hadoop.gzroot@slave$ip:/hadoop; done

pssh -h ~/hdp-other-hosts "cd /hadoop; gtar xfhadoop.gz"

pssh -h ~/hdp-other-hosts "rm -f /hadoop/hadoop.gz"

7.2.9      启动

l  格式化namenode

hdfs namenode -format

如果完成有,输出包含“INFO util.ExitUtil: Exiting with status 0” ,则表示格式化成功。

l  启动hadoop

start-dfs.sh

# 该命令可以任意结点上执行。如果配置文件中没有指明secondary namenode(即在hdfs-site.xml中没有配置dfs.namenode.secondary.http-address),那么在哪个结点上执行该命令,该点将自动成为secondary namenode.

# 以下单独启动某项服务的命令:

hadoop-daemon.sh start namenode # 在namenode主机上执行

hadoop-daemon.sh start secondarynamenode # 在secondarynamenode主机上执行

hadoop-daemon.sh start datanode # 在每个datanode主机上分别执行

l  启动yarn

start-yarn.sh

l  启动history server

mr-jobhistory-daemon.sh start historyserver

如果不启动,mapreduce运行成功后报拒绝链接错误

7.3       可用性校验

7.3.1      各种基本验证

l  在各个主机上执行jps,应该分别看到:

ü  Master:

1936 NameNode

2174 Jps

6634 ResourceManager   (执行start-yarn.sh后出现)

ü  Slave1:

1874 Jps

1813 SecondaryNameNode

1738 DataNode

2954 NodeManager   (执行start-yarn.sh后出现)

ü  Slave2:

1845 Jps

1765 DataNode

6954 NodeManager   (执行start-yarn.sh后出现)

l  访问:http://master:50070

# 检查HDFS各结点情况,如都能访问表示HDFS已无问题,如无法访问或缺少节点,可分析log的中的信息找出问题原因。

l  执行hadoop命令

hdfs dfs -put /hadoop/hadoop/LICENSE.txthdfs://master:9000/  # 上传文件

hdfs dfs -ls hdfs://master:9000/  # 浏览目录

# 9000 后面的斜杠/是和必须的,否则被当作文件。

# 由此看出“hdfs dfs -ls”可以操作不同的 HDFS 集群,只需要指定不同的 URI。

# 文件上传后, 被存储在 DataNode 的 data 目录下

文件上传后被存到DataNode的上,位置是:

/var/hadoop/dfs/data/current/BP-1980762416-192.168.56.105-1465484331968/current/finalized/subdir0/subdir0/

l  执行yarn命令

yarn node -list  #列举 YARN 集群中的所有 NodeManager

Total Nodes:2

         Node-Id       Node-State   Node-Http-Address    Number-of-Running-Containers

    slave1:48021          RUNNING         slave1:8042                            0

    slave2:33378          RUNNING         slave2:8042                            0

yarn node -status slave1:48021  # 查看指定 NodeManager 的状态

l  运行MapReduce程序

在安装目录的 share/hadoop/mapreduce 子目录下,有现存的示例程序。

运行wordcount示例程序试试:

hdfs dfs -mkdir -p hdfs://master:9000/app/wordcount/in

hdfs dfs -put /hadoop/hadoop/LICENSE.txt hdfs://master:9000/app/wordcount/in

hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.4.jar wordcount /app/wordcount/in /app/wordcount/out

hdfs dfs -text hdfs://master:9000/app/wordcount/out/part-r-00000 # 看结果

wordcount 运行完成后,结果会保存在 out 目录下,保存结果的文件名类似于“part-r-00000” 。另外,跑这个示例程序有两个需求注意的点:

1) in 目录下要有文本文件,或 in 即为被统计的文本文件,可以为 HDFS 上的文件或目录,

也可以为本地文件或目录

2) out 目录不能存在,程序会自动去创建它,如果已经存在则会报错。

包hadoop-mapreduce-examples-2.4.0.jar 中含有多个示例程序,不带参数运行,即可看

到用法。

http://master:8088/ # 观察MR运行状况

mapred job -kill jobid # 杀掉一个作业

  【坑1】

按照网上的文章,在hdfs-site.xml中设置了:

    <property>

      <name>dfs.namenode.rpc-address</name>

      <value>master:9001</value>

    </property>

结果总是报Connection refused。而且发现9000端口没有被监听。

后来,据说要把这个端口设置成和dfs.defaultFS的端口一样,试了一下,果然。

之后,把这个属性去掉了,集群也可以正常启动。

不知道是为什么。

  【坑2】

考虑到用的是虚拟机,于是就把yarn-site.xml中的几个内存参数调低了:

    <property>

      <name>yarn.scheduler.minimum-allocation-mb</name>

      <value>64</value>

    </property>

    <property>

      <name>yarn.nodemanager.resource.memory-mb</name>

      <value>512</value>

    </property>

wordcount启动后,程序停在“mapreduce.Job: Running job: job_1465649032027_0001”这里就不继续了,网上说的修改主机名等各种办法都试了一遍,没用。最后,去掉这两个参数,瞬间跑通了。

 

7.3.2      查看集群各种信息

ü  集群总体状况:http://master:50070/

ü  ResourceManager运行在主节点master上

查看状态: http://master:8088/

8088这个端口是yarn-site.xml中的属性:yarn.resourcemanager.webapp.address

ü  NodeManager运行在从节点上,可以通过Web控制台查看对应节点的资源状态。

例如节点slave1:http://slave1:8042/

ü  JobHistory Server:http://master:19888/

ü  hdfs dfs -df -h # 查看还剩多少hdfs空间。-h自动决定以K或M或G来显示大小

7.4       性能校验

考虑使用dfsio等手段做测试,不过,对于虚拟机,就算了。

 

8       Hive安装

在master主机上安装Hive。

8.1       安装mysql

1.     卸载系统自带的mysql

rpm -qa|grepMySQL(或者是rpm-qa|grep mysql)

rpm -e --nodepsmysql-libs-5.1.73-7.el6.x86_64

2.     下载:http://dev.mysql.com/downloads/mysql/5.5.html#downloads

mysql-client-5.5.50-1.linux2.6.x86_64.rpm

mysql-devel-5.5.50-1.linux2.6.x86_64.rpm

mysql-server-5.5.50-1.linux2.6.x86_64.rpm

mysql-shared-5.5.50-1.linux2.6.x86_64.rpm

mysql-shared-compat-5.5.50-1.linux2.6.x86_64.rpm

3.     安装:rpm -ivh mysql-*

4.     配置

cp/usr/share/mysql/my-large.cnf /etc/my.cnf

启动mysql服务:servicemysql start

设置为开机自启动:chkconfig mysql on

 

# 设置root用户:/usr/bin/mysqladmin -u root password '111111' 懒得设置也行

登录:mysql -uroot # 设置了密码的话,加上-p111111

 

创建hive用户、hive数据库等

insert intomysql.user(Host,User,Password)values("localhost","hive",password("hive"));

create databasehive;

grant all onhive.* to hive@'%' identified by 'hive';

grant all onhive.* to hive@'localhost' identified by 'hive';

flushprivileges;

以hive用户登录mysql,看看是否可用。

 

8.2       安装hive

8.2.1      安装

1.  解压安装包

tar -zxvf apache-hive-1.2.1-bin.tar.gz

ln -s apache-hive-1.2.1-bin hive

2.  设置连接mysql

拷贝mysql-connector-java-5.1.39-bin.jar 到hive 的lib下面

3.  设置jline

把jline-2.12.jar拷贝到hadoop相应的目录下,替代jline-0.9.94.jar,否则启动会报错

cp /hive/lib/jline-2.12.jar /hadoop/hadoop-2.6.4/share/hadoop/yarn/lib/

否则会报异常:

Terminal initialization failed; falling back tounsupported

java.lang.IncompatibleClassChangeError: Found classjline.Terminal, but interface was expected

4.  创建hive临时文件夹

mkdir /hadoop/hive/tmp

 

8.2.2      配置

添加环境变量

vi ~/.bash_profile

导入下面的环境变量

export HIVE_HOME=/hadoop/hive

export PATH=$PATH:$HIVE_HOME/bin

使其有效:source.bash_profile

 

8.2.2.1  配置全局参数

设定在hive-site.xml中

<property>

<name>javax.jdo.option.ConnectionURL</name>

<value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value>

</property>

<property>

<name>javax.jdo.option.ConnectionDriverName</name>

<value>com.mysql.jdbc.Driver</value>

</property>

<property>

<name>javax.jdo.option.ConnectionPassword</name>

<value>hive</value>

</property>

<property>

    <name>javax.jdo.option.ConnectionUserName</name>

    <value>hive</value>

<description>Username to use against metastore database</description>

</property>

<property>

    <name>hive.exec.local.scratchdir</name>

    <value>/hadoop/hive/iotmp/scratchdir</value>

    <description>Local scratch space for Hive jobs</description>

</property>

<property>

    <name>hive.downloaded.resources.dir</name>

    <value>/hadoop/hive/iotmp/${hive.session.id}_resources</value>

    <description>Temporary local directory for added resources in the remote file system.</description>

</property>

<property>

    <name>hive.querylog.location</name>

    <value>/hadoop/hive/iotmp/querylog</value>

    <description>Location of Hive run time structured log file</description>

</property>

<property>

    <name>hive.server2.logging.operation.log.location</name>

    <value>/hadoop/hive/iotmp/operation_logs</value>

    <description>Top level directory where operation logs are stored if logging functionality is enabled</description>

</property>

n  创建对应的目录

mkdir /hadoop/hive/iotmp/operation_logs /hadoop/hive/iotmp/scratchdir/hadoop/hive/iotmp/querylog

n  除以上参数外,其他参数根据情况进行修改:

1)  hive.hwi.listen.host/ hive.hwi.listen.port:Hive Web的监听。默认是0.0.0.0/9999

2)  autoCreateSchema:启动时创建SCHEMA,一旦创建后,应该把这个参数设置成false。??

3)  hive.metastore.warehouse.dir:存储每个表的根目录,是HDFS上的目录。表的数据都存放在这个文件夹里面

8.2.2.2  临时设置参数

在启动Hive cli的时候进行配置,可以在命令行添加-hiveconf param=value来设定参数,例如:

$ hive--hiveconf mapreduce.job.queuename=queue1

这样在Hive中所有MapReduce作业都提交到队列queue1中。这一设定对本次启动的会话有效,下次启动需要重新配置。

8.2.2.3  在CLI中设置参数

在已经进入cli时进行参数声明,可以在HQL中使用SET关键字设定参数,例如:

 

hive> set mapreduce.job.queuename=queue1;

这样也能达到方法二的效果。

这种配置也是对本次启动的会话有效,下次启动需要重新配置。在HQL中使用SET关键字还可以查看配置的值,如下:

 

hive> set mapreduce.job.queuename;

 

 

mapreduce.job.queuename=queue1

如果set后面什么都不添加,这样可以查到Hive的所有属性配置

8.3       启动

启动hadoop后,执行hive命令:hive

测试输入 show database;

hive> show databases;

OK

default

hive> show tables;

OK

8.4       日志

默认情况,hive的日志存放在/tmp/<user.name>文件夹的hive.log文件中。

在默认的日志级别情况下,是不能将DEBUG信息输出,这样一来出现的各种详细的错误信息都是不能数错的。但是我们可以通过以下两种方式修改log4j输出的日志级别,从而利用这些调试日志进行错误定位,具体做法如下:

l  方法一:

启动指定日志:hive --hiveconf hive.root.logger=DEBUG,console

本方式只是对本次会话有效。

也可以使用自用的配置文件:

-hiveconfhive.log4j.file=/home/iteblog/hive-log4j.properties

l  方法二:

在${HIVE_HOME}/conf/hive-log4j.properties文件中找到hive.root.logger属性,并将其修改为下面的设置

hive.root.logger=DEBUG,console

8.5       可能碰到的问题

l  Unable to instantiate …… SessionHiveMetaStoreClient

如果碰到:java.lang.RuntimeException: Unable to instantiateorg.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient

不要急于去搜索这个异常,要仔细看后面的错误堆栈。因为没有正确拷贝mysql-conector.jar或不能连接MYSQL数据库(比如用户名密码不对)等等各种问题都可能会报以上异常。

 

9       Zookeeper安装

9.1       安装ZK

9.1.1      安装

1.  解压安装包

tar zxvf zookeeper-3.4.6.tar.gz

ln -s /hadoop/zookeeper-3.4.6 zookeeper

9.1.2      配置

1.  cpzookeeper/conf/zoo_sample.cfg zookeeper/conf/zoo.cfg

2.  编辑zoo.cfg

ü  修改:dataDir=/var/hadoop/zookeeper/datadir

ü  添加:dataLogDir=/var/hadoop/zookeeper/logsdir

ü  添加:

n  server.1=master:2888:3888

n  server.2=slave1:2888:3888

n  server.3=slave2:2888:3888

3.  分发到其他节点

tar cf zookeeper-done.tar zookeeper-3.4.6

for ip in `seq 1 2`; do scp /hadoop/zookeeper-done.tarroot@slave$ip:/hadoop; done

pssh -h ~/hdp-other-hosts "cd /hadoop; tar xfzookeeper-done.tar"

pssh -h ~/hdp-other-hosts "cd /hadoop; ln -s/hadoop/zookeeper-3.4.6 zookeeper"

4.  在各节点上创建ZK的目录:数据文件和日志存放目录

1)  mkdir -p/var/hadoop/zookeeper/datadir /var/hadoop/zookeeper/logsdir

2)  pssh -h~/hdp-other-hosts "mkdir -p /var/hadoop/zookeeper/datadir/var/hadoop/zookeeper/logsdir"

5.  编辑各节点的myid值

echo 1 > /var/hadoop/zookeeper/datadir/myid

pssh -H root@192.168.0.106 "echo 2 >/var/hadoop/zookeeper/datadir/myid"

pssh -H root@slave2 "echo 3 >/var/hadoop/zookeeper/datadir/myid"

或者使用下面循环代替上面的两句:

for ip in `seq 1 2`; do pssh -H root@slave$ip "echo$[$ip + 1] > /var/hadoop/zookeeper/datadir/myid"; done

10    Hbase安装

在master主机上安装Hbase。

10.1    安装Hbase

10.1.1   安装

6.  解压安装包

tar -zxvf hbase-1.1.5-bin.tar.gz

ln -s /hadoop/hbase-1.1.5 hbase

10.1.2   配置

10.1.2.1         HBASE规划

节点主机名

Master

ZooKeeper

RegionServer

master

yes

yes

no

slave1

backup

yes

yes

slave2

no

yes

yes

 

10.1.2.2         配置参数

修改conf目录下的相应文件。

1.  配置regionservers文件

增加各个主机名:

slave1

slave2

2.     设定在hbase-site.xml中

<property>

  <name>hbase.rootdir</name>

  <value>hdfs://master:9000/hbase</value>

</property>

<property>

  <name>hbase.cluster.distributed</name>

  <value>true</value>

</property>

3.     分发到其他机器上

tar cf hbase-done.tar hbase-1.1.5

for ip in `seq 1 2`; do scp /hadoop/hbase-done.tarroot@slave$ip:/hadoop; done

pssh -h ~/hdp-other-hosts "cd /hadoop; tar xf hbase-done.tar"

pssh -h ~/hdp-other-hosts "cd /hadoop; ln -s/hadoop/hbase-1.1.5 hbase"

10.2    启动

启动:./bin/start-hbase.sh

停止:./bin/stop-hbase.sh  # 这个命令执行后可能过几秒才能完全把HBASE停止掉。

进入HBASE的CLI:./bin/hbase shell

 

启动后,HBASE将在HDFS上创建相应的目录(hbase-site.xml中hbase.rootdir设定的目录)

可通过命令查看其内容:

$ ./bin/hadoop fs -ls /hbase  或者:hdfs dfs -ls hdfs://master:9000/hbase

Found 7 items

drwxr-xr-x - hbase users 0 2014-06-25 18:58 /hbase/.tmp

drwxr-xr-x - hbase users 0 2014-06-25 21:49 /hbase/WALs

drwxr-xr-x - hbase users 0 2014-06-25 18:48 /hbase/corrupt

drwxr-xr-x - hbase users 0 2014-06-25 18:58 /hbase/data

-rw-r--r-- 3 hbase users 42 2014-06-25 18:41 /hbase/hbase.id

-rw-r--r-- 3 hbase users 7 2014-06-25 18:41 /hbase/hbase.version

drwxr-xr-x - hbase users 0 2014-06-25 21:49 /hbase/oldWALs

 

10.3    日志

启动后,HBASE会在其主目录下创建logs目录,其日志被输出到该目录中。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值