一、下载需要的工具包
jdk-7u67-linux-x64.tar.gz,apache-maven-3.0.5-bin.tar.gz,cmake-2.8.12.1.tar.gz
,hadoop-2.4.0.tar.gz,protobuf-2.5.0.tar.gz,hbase-0.98.9-hadoop2-bin.tar.gz,zookeeper-3.4.5.tar.gz, apache-hive-0.13.1-bin.tar.gz(注:hadoop、hbase、zookeeper、hive之间都是有版本要求的,如果版本不匹配会,在安装过程会出现问题)
二、linux基础环境配置
1.配置集群hosts列表
vi /etc/hosts
添加如下内容:
10.21.16.47master localhost
10.21.16.48node1
10.21.16.49node2
10.21.16.50node3
2.配置4台服务器时间同步
命令:date –s ‘2015-01-2921:10:34’
3.配置4台服务器主机名
vi /etc/sysconfig/network
如47服务器为: HOSTNAME=master 其他3台服务器主机名依次为node1,node2,node3
配置完后重启服务器,命令为reboot
4.创建用户
分别在4台服务器上创建用户hadoop
useradd hadoop
passwd hadoop
三、Hadoop相关工具安装
1.安装JDK
进入jdk的tar包目录:cd /opt
解压tar包到指定目录:tar –zxvf jdk-7u67-linux-x64.tar.gz -C /usr/lib/
打开环境变量文件: vi /etc/profile
添加如下信息:
export JAVA_HOME=/usr/lib/jdk1.7.0_67
exportPATH=${JAVA_HOME}/bin:$PATH
重新加载环境变量文件:source /etc/profile
检查是否安装成功:java -version
2.安装maven
进入maven的tar包目录:cd /opt
解压tar包到指定目录:tar -zxvf apache-maven-3.0.5-bin.tar.gz -C /usr
打开环境变量文件: vi /etc/profile
添加如下信息:
export M2_HOME=/usr/apache-maven-3.0.5
exportM2_HOME
exportPATH=${M2_HOME}/bin:$PATH
重新加载环境变量文件:source /etc/profile
检查是否安装成功:mvn -version
3.安装cmake
进入cmake的tar包目录:cd /opt
解压tar包到指定目录:tar - zxvf cmake-2.8.12.1.tar.gz -C /usr
进入cmake目录:cd /usr/cmake-2.8.12.1
./configure
make
make install
4.安装protobuf
进入protobuf的tar包目录:cd /opt
解压tar包到指定目录:tar -zxvf protobuf-2.5.0.tar.gz –C /usr
进入protobuf目录:cd /usr/protobuf-2.5.0
./configure --prefix=/root/protobuf
make
make install
打开环境变量文件: vi /etc/profile
添加如下信息:
exportPATH=$PATH:/root/protobuf/bin
exportPKG_CONFIG_PATH=/root/protobuf/lib/pkgconfig
重新加载环境变量文件:source /etc/profile
5.安装hadoop
进入hadoop的tar包目录:cd/opt
解压tar包到指定目录:tar -zxvf hadoop-2.4.0.tar.gz -C /home/hadoop
打开环境变量文件: vi /etc/profile
添加如下信息:
export HADOOP_HOME=/home/hadoop/hadoop-2.4.0
exportPATH=${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:$PATH
重新加载环境变量文件:source /etc/profile
授权:chown –R hadoop:hadoop /home/hadoop
检查是否安装成功:hadoop version
四、集群模式启动
启动前需要做些基本的设置
1.配置datanode和tasktracker的地址
vi /home/hadoop/hadoop-2.4.0/etc/hadoop/slaves
添加如下内容:
master
node1
node2
node3
2.免登陆模式(前提必须安装ssh,检查是否安装ssh:ssh localhost,如果显示登录时间则表示安装成功,一般已经自带安装好了)
切换到hadoop用户下
su hadoop
cd/home/hadoop
生成公钥和私钥
ssh-keygen -q -t rsa -N "" -f /home/hadoop/.ssh/id_rsa
说明:这个命令会产生一个公钥(/home/hadoop/.ssh/id_dsa.pub)和密钥(/home/hadoop/.ssh/id_dsa)
查看密钥内容
cd /home/hadoop/.ssh
cat id_rsa.pub
复制id_rsa.pub公钥到 authorized_keys 目录
cat id_rsa.pub > authorized_keys
把 master 机器上的 id_dsa.pub 文件 copy 到 node1,node2,node3 节点上(node1,node2,node3必须已经装好上面的那些工具,可以把master上装好的工具直接copy过去)。
如copy到node1上: scp /home/hadoop/.ssh/ id_dsa.pub hadoop@10.21.16.47:/home/hadoop/.ssh/
注意:如果报找不到目的主机的.ssh目录,则手动建立该目录
在node1,2,3上分别执行cat id_rsa.pub > authorized_keys
验证无密码登陆:
ssh master 如果显示登陆则成功
ssh node1 如果显示登陆则成功,node2,node3也是如此
3.修改${HADOOP_HOME}/etc/hadoop/hadoop-env.sh文件中JAVA_HOME的地址(注:凡是安装目录在hadoop目录下的都授权给hadoop用户,执行相关操作时都切换到hadoop用户下执行,否则其他用户无权进行修改,只有查看的权限,因为已经把权限赋予hadoop用户):
export JAVA_HOME=/usr/lib/jdk1.7.0_67
4.设置hadoop的配置参数(${HADOOP_HOME}/etc/hadoop/core-site.xml,${HADOOP_HOME}/etc/hadoop/hdfs-site.xml)
core-site.xml:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
</configuration>
hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
<description>HDFS数据保存份数,通常是3</description>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/home/hadoop/hdfs/name1,/home/hadoop/hdfs/name2</value>
<description>HDFS namenode image 文件保存地址</description>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/home/hadoop/hdfs/data1,/home/hadoop/hdfs/data2</value>
<description>HDFS数据文件 存储路径,可以配置多个不同的分区和磁盘中,使用,号分隔</description>
</property>
<property>
<name>dfs.datanode.failed.volumes.tolerated</name>
<value>1</value>
</property>
</configuration>
注:在/home/hadoop/hdfs下新建data1,data2,name1,name2目录
5.至此,上面所有安装配置都通过scp命令copy到node1,node2,node3上
6.第一次启动文件系统前需格式化文件系统,即通过hadoopnamenode –format或hdfsnamenode –format
7.使用start-dfs.sh来启动hdfs服务,使用jps来看hdfs的进程是否启动:
[hadoop@master hadoop]#jps
5782 NameNode
5897 DataNode
6168 Jps
6046 SecondaryNameNode
如果没有DataNode进程,则使用stop-dfs.sh停掉hdfs服务,将data1,data2,name1.name2目录全部清空,再次格式化文件系统,即hadoop namenode –format或hdfs namenode –format,使用start-dfs.sh启动hdfs服务。
再通过web界面来查看下namenode是否正常启动.默认地址:NameNode- http://10.21.16.47:50070/
如果无法打开,可能是由于防火墙是开着的.关闭防火墙.service iptables stop。
8. 可以通过hadoop如下命令来测试hdfs是否可用:
[hadoop@master hadoop]# hadoop fs -ls /
[hadoop@master hadoop]# hadoop fs -mkdir /zl
[hadoop@master hadoop]# hadoop fs -mkdir /zl
mkdir: `/zl': File exists
[hadoop@master hadoop]# hadoop fs -ls /zl
[hadoop@master hadoop]# hadoop fs -ls /
Found 1 items
drwxr-xr-x - root supergroup 0 2015-01-2922:23 /zl
可以导入数据到文件系统
[hadoop@master hadoop]# hdfs dfs -put hadoop/ /zl/input
[hadoop@master hadoop]# hdfs dfs -ls /zl/input
Found 25 items
-rw-r-r- 1 hadoop supergroup 3589 2015-01-29 22:23 /zl/input/capacity-scheduler.xml
-rw-r-r- 1 hadoop supergroup 1335 2015-01-29 22:23 /zl/input/configuration.xsl
9.配置mapreduce(${HADOOP_HOME}/etc/hadoop/mapred-site.xml, ${HADOOP_HOME}/etc/hadoop/yarn-site.xml)
由于没有mapred-site.xml文件,所以需要copy一份
cp yarn-site.xml mapred-site.xml
mapred-site.xml:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
yarn-site.xml:
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
</configuration>
10.启动或停止yarn
sbin/start-yarn.sh
sbin/stop-yarn.sh
通过web浏览器来查看下yarn状态:ResourceManager- http://10.21.16.47:8088/
11.测试
hadoop jar /home/hadoop/hadoop-2.4.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.4.0.jargrep /zl/input /zl/output3/ 'dfs[a_z.]+'
在未启动yarn模式下,也是可以运行上面命令得出结果,未启动yarn模式,采用的是默认的mrv1来执行的.
配置了yarn并启动了yarn,则采用了yarn来运行上面的任务的.
五、Zookeeper的安装
1.进入zookeeper的tar包目录:cd /opt
2.解压tar包到指定目录:tar -zxvf zookeeper-3.4.5.tar.gz -C /home/hadoop
3.进入zookeeper的conf目录:cd /home/hadoop/ zookeeper-3.4.5/conf
4.修改配置文件zoo_sample.cfg为zoo.cfg:mv zoo_sample.cfg zoo.cfg
5.修改zoo.cfg配置文件内容:dataDir=/home/hadoop/zookeeper-3.4.5/data //数据目录可随意定义,如果这样定义,需在zookeeper-3.4.5目录下新建data目录
6.在zoo.cfg最后添加如下内容:
server.1=master:2888:3888
server.2=node1:2888:3888
server.3=node2:2888:3888
server.4=node3:2888:3888
说明:server.X=A:B:C
其中X是一个数字, 表示这是第几号server.
A是该server所在的IP地址.
B配置该server和集群中的leader交换消息所使用的端口.
C配置选举leader时所使用的端口.
7.进入data文件夹创建文件myid 内容为1
1表示这是第几号server, 与server.X=A:B:C中的X对应
8.将配置到的zookeeper拷贝到其他服务器主机上(node1,node2,node3)上
使用 scp -r 命令
分别修改 myid文件内容为2,3,4
9.启动4个结点的bin目录下的./zkServer.sh start
由于启动时,每个节点都会试图去连接其它节点,因此先启动的刚开始会连接不上其它的,导致日志中会包含错误信息,在未全启动之前,这个属正常现象。
10.安装验证
脚本zkServer.sh不但可以用来启动ZooKeeper,还可以用来查看状态: ./zkServer.shstatus
如遇到以下错误,请稍安勿躁,过会再试,可能是因为还未完全起来:
[hadoop@master ~/ zookeeper-3.4.5/bin]$ ./zkServer.sh status JMX enabled by default Using config: /home/hadoop/ zookeeper-3.4.5/bin/../conf/zoo.cfg Error contacting service. It is probably not running. |
集群成功启动后,将有且只会有一个成为leader,其它是follower:
[hadoop@ master ~/ zookeeper-3.4.5/bin]$ ./zkServer.sh status JMX enabled by default Using config: /home/hadoop/zookeeper/bin/../conf/zoo.cfg Mode: leader
[hadoop@ node1 ~/ zookeeper-3.4.5/bin]$ ./zkServer.sh status JMX enabled by default Using config: /home/hadoop/zookeeper-3.4.5/bin/../conf/zoo.cfg Mode: follower
[hadoop@ node2 ~/zookeeper/bin]$ ./zkServer.sh status JMX enabled by default Using config: /home /hadoop/zookeeper/bin/../conf/zoo.cfg Mode: follower
[hadoop@ node3 ~/zookeeper/bin]$ ./zkServer.sh status JMX enabled by default Using config: /home /hadoop/zookeeper/bin/../conf/zoo.cfg Mode: follower |
11 基本命令
进入ZooKeeper的bin目录,执行zkCli.sh进入ZooKeeper的命令行操作界面。
./zkCli.sh -server 10.21.16.47:2181 |
参数“-server”中只含一个“-”,用以指定被连接的ZooKeeper节点,可以为Leader,也可以为Follower,“10.21.16.47”为Leader或Follower的IP或主机名,“2181”为ZooKeerp提供的客户端服务端口。
进入ZooKeeper命令行操作界面后,输入help然后回车,可以看到ZooKeeper支持的命令列表:
[zk: DEVNET-154-79:2181(CONNECTED) 0] help ZooKeeper -server host:port cmd args stat path [watch] set path data [version] ls path [watch] delquota [-n|-b] path ls2 path [watch] setAcl path acl setquota -n|-b val path history redo cmdno printwatches on|off delete path [version] sync path listquota path rmr path get path [watch] create [-s] [-e] path data acl addauth scheme auth quit getAcl path close connect host:port |
“ls”有点像HDFS中的“ls”,随便测试下:
[zk: DEVNET-154-79:2181(CONNECTED) 1] ls / [zookeeper, hbase] |
再测试下:
[zk: DEVNET-154-79:2181(CONNECTED) 2] ls /hbase [replication, meta-region-server, rs, splitWAL, backup-masters, table-lock, region-in-transition, online-snapshot, master, running, recovering-regions, draining, namespace, hbaseid, table] |
再测试一下:
[zk: DEVNET-154-79:2181(CONNECTED) 4] ls /hbase/backup-masters [VM-40-171-sles10-64,60000,1398162436871] |
六、Hbase的安装
1.进入zookeeper的tar包目录:cd /opt
2.解压tar包到指定目录:tar -zxvf hbase-0.98.9-hadoop2-bin.tar.gz -C /home/hadoop
3.修改环境变量:vi /etc/profile
exportHBASE_HOME=/home/hadoop/hbase-0.98.9-hadoop2
exportPATH=${HBASE_HOME}/bin:$PATH
4.重新加载环境变量文件: source /etc/profile
5.进入conf目录修改hbase-env.sh文件:
cd /home/hadoop/hbase-0.98.9-hadoop2/conf
vi hbase-env.sh
exportJAVA_HOME=/usr/lib/jdk1.7.0_67
export HBASE_MANAGES_ZK=false
使用独立的ZooKeeper时需要修改HBASE_MANAGES_ZK值为false,为不使用默认ZooKeeper实例。
6.修改conf/hbase-site.xml
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://master:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.master</name>
<value>master:60000</value>
</property>
<property>
<name>hbase.master.port</name>
<value>60000</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>master,node1,node2,node3</value>
</property>
</configuration>
7.修改conf/regionservers文件,添加如下内容:
master
node1
node2
node3
8.在4个结点上启动hbase: start-hbase.sh
9.安装测试
[root@masterconf]# hbase shell
2015-01-2923:13:27,343 INFO [main]Configuration.deprecation: hadoop.native.lib is deprecated. Instead, useio.native.lib.available
HBaseShell; enter 'help<RETURN>' for list of supported commands.
Type"exit<RETURN>" to leave the HBase Shell
Version0.98.9-hadoop2, r96878ece501b0643e879254645d7f3a40eaf101f, Mon Dec 15 23:00:20PST 2014
hbase(main):001:0>version
0.98.9-hadoop2,r96878ece501b0643e879254645d7f3a40eaf101f, Mon Dec 15 23:00:20 PST 2014
如果能出现上面信息,说明安装成功!
七、hive的安装
1.进入hive的tar包目录:cd /opt
2.解压tar包到指定目录:tar -zxvf apache-hive-0.13.1-bin.tar.gz -C /home/hadoop
3.修改环境变量:vi /etc/profile
export HIVE_HOME=/home/hadoop/apache-hive-0.13.1-bin
export PATH=${HIVE_HOME}/bin:$PATH
exportCLASSPATH=${HIVE_HOME}/lib:$CLASSPATH
4.重新加载环境变量文件: source /etc/profile
5.进入hive目录复制3个配置文件
cd/home/hadoop/apache-hive-0.13.1-bin/conf
cp hive-env.sh.templatehive-env.sh
cp hive-log4j.properties.templatehive-log4j.properties
cp hive-default.xml.templatehive-site.xml
6.修改hive-env.sh配置文件,内容如下:
vi hive-env.sh
export HADOOP_HOME=/home/hadoop/hadoop-2.4.0
exportHIVE_CONF_DIR=/home/hadoop/apache-hive-0.13.1-bin/conf
export HIVE_AUX_JARS_PATH=/home/hadoop/apache-hive-0.13.1-bin/lib
7.修改hive-log4j.properties配置文件
vi hive-log4j.properties
log4j.appender.EventCounter=org.apache.hadoop.log.metrics.EventCounter
如果没有修改则会出现如下信息:
WARNING:org.apache.hadoop.metrics.EventCounteris deprecated
please useorg.apache.hadoop.log.metrics.EventCounter in all the log4j.properties files;
8.修改hive-site.xml配置文件
<configuration>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>hdfs://master:9000/usr/hive/warehouse</value>
<description>数据目录</description>
</property>
<property>
<name>hive.exec.scratchdir</name>
<value>hdfs://master:9000/usr/hive/tmp</value>
<description>临时文件目录</description>
</property>
<property>
<name>hive.querylog.location</name>
<value>hdfs://master:9000/usr/hive/log</value>
<description>日志文件目录</description>
</property>
<property>
<name>hive.metastore.local</name>
<value>false</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://10.21.16.24:3306/hive?createDatabaseIfNotExist=true</value>
<description>设置元数据连接字串</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
<description>设置hive存放的元数据的数据库的用户名称</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hive</value>
<description>设置用户登录数据库时的密码</description>
</property>
<property>
<name>hive.metastore.uris</name>
<value>thrift://10.21.16.47:9083</value>
<description>把metastore配置到远程机器上</description>
</property>
</configuration>
9.使用hadoop创建相应的我呢缉拿路径,并且要为它们设定权限:
hdfs dfs –mkdir –p /usr/hive/warehouse
hdfs dfs -mkdir -p /usr/hive/tmp
hdfs dfs -mkdir -p /usr/hive/log
9.由于hive的安装采用的是远程模式,所以元数据放置在远程的MySql数据库,本文使用的是10.21.16.24远程服务器上的MySql
(1)登陆10.21.16.24服务器
(2)启动mysql
service mysqld start
(3)初始化mysql
/usr/bin/mysql_secure_installation
[...]
Enter current password for root(enter for none):
OK, successfully used password,moving on...
[...]
Set root password? [Y/n] y
New password:
Re-enter new password:
Remove anonymous users? [Y/n] Y
[...]
Disallow root login remotely?[Y/n] N
[...]
Remove test database and accessto it [Y/n] Y
[...]
Reload privilege tables now?[Y/n] Y
All done!
(4)用root登陆mysql,为hive建立mysql账户
mysql –u root -p
create user ‘hive’ identified by ‘hive’
grant all privileges on *.* to ‘hive’@’%’ identified by ‘hive’ with option
flush privileges;
exit
(5)使用hive账户登陆mysql,并建立hive专用的数据库
mysql -u hive -p
create database hive;
(6)下载JDBC驱动包并复制到hive的lib目录下
mysql-connector-java-5.1.22-bin.jar
(7)hive启动
启动分为启动metastore和hiveserver,其中metastore用于和mysql之间的表结构创建或者更新时通讯,hiveserver用于客户端连接,这两个都要启动
启动metastore:(远程mysql需要启动)
hive --service metastore
启动hiveservice:
hive --servie hiveserver
(7)启动测试
(8)启动时如果报Unable to instantiate org.apache.hadoop.hive.metastore.HiveMetaStoreClient 错误
解决方案:a)先检查mysql连接jdbc使用的jar包是否放到hive的lib下面
b)检查是否成功连接到mysql服务器
c)正确配置hive-site.xml
至此,所有集群配置结束!