1. 准备工作
软件准备:
1) Hadoop: hadoop-2.5.0.tar.gz
2) Jdk: jdk-7u71-linux-x64.tar.gz
3) Hive:apache-hive-0.13.1-bin.tar.gz
4) Hbase:hbase-0.98.8-hadoop2-bin.tar.gz
5) Sqoop:sqoop-1.99.4-bin-hadoop200.tar.gz
6) Zookeeper:zookeeper-3.4.6.tar.gz
7) eclipse:eclipse-SDK-4.3.1-linux-gtk-x86_64.tar.gz
8) Eclipse插件:hadoop-eclipse-plugin-2.5.0.jar
9) Pig:pig-0.13.0.tar.gz
10) Mysql:MySQL-server-5.5.21-1.linux2.6.x86_64.rpm
MySQL-client-5.5.21-1.linux2.6.x86_64.rpm
MySQL-devel-5.5.21-1.linux2.6.x86_64.rpm
11) Mysql驱动:mysql-connector-java-5.0.3.jar
硬件准备:
物理机器总 共4台,想配置基于物理机的hadoop集群中包括 4 个 节点: 1 个 Master , 3 个 Salve , 节点之间局域网连接,可以相互 ping 通
Ip分布 为
192.168.0.1 hadoop1
192.168.0.2 hadoop2
192.168.0. 3 hadoop3
192.168.0. 4 hadoop4
操作系统为 RedHat 5.4 64bit
Master机器主要配置NameNode和JobTracker的角色, 负责总 管分布式数据和分解任 务 的 执 行;3个Salve机器配置DataNode和TaskTracker的角色, 负责 分布式数据存 储 以及任 务 的 执 行。
此处省略Linux操作系统的安装... ...
创建账户
使用root登陆 所有机器后,所有的机器都 创建 hadoop 用 户
useradd hadoop
passwd hadoop
此时 在 /home/ 下就会生成一个hadoop 目录 ,目 录 路径 为 /home/hadoop
创建相关的目录
定义 需要数据及目 录 的存放路径
定义 代 码及工具 存放的路径
mkdir -p /home/hadoop/source
mkdir -p /home/hadoop/tools
定义 数据 节 点存放的路径到跟目 录 下的hadoop文件夹, 这 里是数据 节 点存放目 录 需要有足够的空 间 存放
mkdir -p /hadoop/hdfs
mkdir -p /hadoop/tmp
mkdir -p /hadoop/log
设置可写权限
chmod -R 777 /hadoop
定义 java安装程序路径
mkdir -p /usr/java
2. 安装JDK
1 ,将下 载好的 jdk-7u71-linux-x64.tar.gz通 过 SSH 上 传到 /usr/java 下
scp -r ./jdk-6u32-linux-x64.binroot@hadoop1:/usr/java
2 , 进入 JDK 安装目 录 cd /usr/java 并且 执行 chmod +x jdk-7u71-linux-x64.bin
3 , 执行 ./ jdk-7u71-linux-x64.bin
4 ,配置 环境变量,执行 cd /etc 命令后 执行 vi profile ,在行末尾添加
export JAVA_HOME=/usr/java/jdk1.7.0_71
exportCLASSPATH=.:$JAVA_HOME/lib/tools.jar:/lib/dt.jar
export PATH=$JAVA_HOME/bin:$PATH
5 , 执行 chmod +x profile 将其 变成可执行文件
6 , 执行 source profile 使其配置立即生效
source /etc/profile
7 , 执行 java -version 查看是否安装成功
这个步骤所有机器都必须安装
[root@hadoop1 bin]# java -version
java version "1.6.0_32"
Java(TM) SE Runtime Environment (build 1.7.0_71-b14)
Java HotSpot(TM) 64-Bit Server VM (build 24.71-b01,mixed mode)
3. 修改主机名
修改主机名,所有节点均一样配置
1 , 连接到主节点 192.168.0.1 ,修改 network , 执行 vim/etc/sysconfig/network ,修改 HOSTNAME=hadoop1
2 ,修改 hosts 文件, 执行 cd /etc 命令后 执行 vi hosts ,在行末尾添加 :
192.168.0. 1 hadoop1
192.168.0. 2 hadoop2
192.168.0. 3 hadoop3
192.168.0. 4 hadoop4
3 , 执行 hostname hadoop1
4 , 执行 exit 后重新 连接可看到主机名以修改 OK
其他节点 也修改主机名后添加Host, 或者 host 文件可以在后面执行 scp 覆盖操作
4. 配置SSH无密码登陆
SSH 无密 码原理简介 :
首先在 hadoop1 上生成一个密钥对,包括一个公钥和一个私钥,并将公钥复制到所有的 slave(hadoop2-hadoop4) 上。
然后当 master 通过 SSH 连接 slave 时, slave 就会生成一个随机数并用 master 的公钥对随机数进行加密,并发送给 master 。
最后 master 收到加密数之后再用私钥解密,并将解密数回传给 slave , slave 确认解密数无误之后就允许 master 不输入密码进行连接了
2 ,具体步 骤(在root用户和hadoop用户登陆情况下执行)
1 、 执行命令 ssh-keygen -trsa 之后一路回车,查看刚生成的无密码钥对: cd .ssh 后执行 ll
2 、把 id_rsa.pub 追加到授权的 key 里面去。 执行命令 cat~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys
3 、修改权限: 执行 chmod 600~/.ssh/authorized_keys
4 、确保 cat/etc/ssh/sshd_config 中存在如下内容
RSAAuthenticationyes
PubkeyAuthenticationyes
AuthorizedKeysFile .ssh/authorized_keys
如需修改,则在修改后执行重启 SSH 服务命令使其生效 :service sshd restart
5 、将公 钥复制到所有的 slave 机器上 :scp ~/.ssh/id_rsa.pub192.168.0.3 : ~/ 然后 输入 yes ,最后 输入 slave 机器的密 码
6 、在 slave 机器上 创建 .ssh 文件夹 :mkdir~/.ssh 然后执行 chmod 700 ~/.ssh (若文件夹以存在则不需要创建)
7 、追加到授权文件authorized_keys 执行命令 :cat ~/id_rsa.pub >> ~/.ssh/authorized_keys 然后 执行 chmod 600~/.ssh/authorized_keys
8 、重复第 4 步
9 、 验证命令 : 在 master 机器上 执行 ssh 192.168.0.3 发现主机名由hadoop1 变成 hadoop3 即成功,最后删除 id_rsa.pub 文件 :rm -r id_rsa.pub
按照以上步骤分别配置 hadoop1,hadoop2,hadoop3,hadoop4 ,要求每个都可以无密 码登录
5. HADOOP 安装
创建目录
mkdir –p /home/hadoop
cd /home/hadoop
将安装包复制到该目录下解压
tar zxvf hadoop-2.5.0.tar.gz
/etc/profile
配置环境变量: vim /etc/profile
添加
export HADOOP_DEV_HOME=/home/hadoop/hadoop
export PATH=$PATH:$HADOOP_DEV_HOME/bin
export PATH=$PATH:$HADOOP_DEV_HOME/sbin
exportHADOOP_MAPARED_HOME=${HADOOP_DEV_HOME}
export HADOOP_COMMON_HOME=${HADOOP_DEV_HOME}
export HADOOP_HDFS_HOME=${HADOOP_DEV_HOME}
export YARN_HOME=${HADOOP_DEV_HOME}
exportHADOOP_CONF_DIR=${HADOOP_DEV_HOME}/etc/hadoop
exportHDFS_CONF_DIR=${HADOOP_DEV_HOME}/etc/hadoop
exportYARN_CONF_DIR=${HADOOP_DEV_HOME}/etc/hadoop
创建并配置hadoop-env.sh
vim/usr/hadoop/hadoop-2.0.0-alpha/etc/hadoop/hadoop-env.sh
在末尾添加 export JAVA_HOME=/usr/java/jdk1.7.0_71
core-site.xml
在 configuration 节点里面添加属性
添加 httpfs 的选项
slave配置
vim /home/hadoop/hadoop/etc/hadoop/slaves
添加 slave 的 IP
192.168.0. 2
192.168.0. 3
192.168.0. 4
配置hdfs-site.xml
vim/home/hadoop/hadoop/etc/hadoop/hdfs-site.xml
添加节点
配置yarn-site.xml
添加节点
配置httpfs-site.xml
同步代码到其他机器
1.同步配置代 码
先在 slaves 的机器上也创 建
mkdir -p /home/hadoop/source
部署hadoop代码 , 创 建 软连接 ,然后只要同步修改 过 的etc/hadoop下的配置文件即可
2.同步 /etc/profile
3.同步 /etc/hosts
scp -r /etc/profileroot@hadoop2:/etc/profile
scp -r /etc/hosts root@hadoop2:/etc/hosts
其他机器以此操作
Hadoop启动
格式化集群
hadoop namenode -format -clusteridclustername
启动hdfs
start-dfs.sh
启动Yarn
start-yarn.sh
启动httpfs
httpfs.sh start
使得对外 可以提高 http 的restful接口服 务
测试
安装结果验证
验证hdfs
在各台机器执行 jps 看进程 是否都已 经启动 了
[root@hadoop1 hadoop]# jps
7396 NameNode
24834 Bootstrap
7594 SecondaryNameNode
7681 ResourceManager
32261 Jps
[root@hadoop2 ~]# jps
8966 Jps
31822 DataNode
31935 NodeManager
进程启动正常
验证是否可以登 陆
hadoop fs -ls hdfs://192.168.0.1:9000/
hadoop fs -mkdir hdfs://192.168.0.1:9000/testfolder
hadoop fs -copyFromLocal ./xxxxhdfs://192.168.0.1:9000/testfolder
hadoop fs -ls hdfs://192.168.0.1:9000/testfolder
6. zookeeper安装
将zookeeper-3.4.6.tar.gz 复制到/home/hadoop目录下
Chmod 777 zookeeper-3.4.6.tar.gz
tar zxvf zookeeper-3.4.6.tar.gz
mv zookeeper-3.4.6 zookeeper
建立数据目录
mkdir /home/hadoop/zookeeper/data
修改配置文件
cd zookeeper/conf
cp zoo_sample.cfg zoo.cfg
编辑配置文件
vi zoo.cfg
# 修改数据目录dataDir为以下值
dataDir=/home/hadoop/zookeeper/data
# 添加以下段落
server.1=192.168.0.1:2886:3886
server.2=192.168.0.2:2887:3887
server.3=192.168.0.3:2888:3888
server.4=192.168.0.4:2889:3889
server.id=host:port:port标识不同的ZooKeeper服务器
需要在每个服务器的数据目录中(这边为/home/hadoop/zookeeper/data)创建myid文件,文件的内容为以上对应的server.id中的id
vi /data/zookeeper/myid
# 值为各个服务器对应的server.id中的id
id
e. 配置环境变量并启动ZooKeeper
vi /etc/profile
export ZOOKEEPER_HOME=/home/hadoop/zookeeper
PATH=$PATH:$ZOOKEEPER_HOME/bin
/在剩下的服务器中做相同的zookeeper操作,需要在每一台机器上都启动
zkServer.sh start
f. 验证
jps 查看多了QuorumpeerMain 进程
zkCli.sh -server 192.168.0.2:2181
[zk: 192.168.0.2:2181(CONNECTED) 0] help
[zk: 192.168.0.2:2181(CONNECTED) 0] create/user 123456
[zk: 192.168.0.2:2181(CONNECTED) 0] get/user
7. Hbase 安装
将hbase-0.98.8-hadoop2-bin.tar.gz 复制到/home/hadoop/
解压:tar zxvf hbase-0.98.8-hadoop2-bin.tar.gz
mv hbase-0.98.8-hadoop2 /home/hadoop/hbase
cd hbase/conf
编辑配置文件hbase-site.xml
vi hbase-site.xml
指定HBase运行的模式: false:单机模式或者为分布式模式 true: 全分布模式
编辑配置文件regionservers
vi regionservers
hadoop1
hadoop2
hadoop3
hadoop4
设置环境变量hbase-env.sh
vi hbase-evn.sh
export HBASE_MANAGES_ZK=false
使用独立的ZooKeeper时需要修改HBASE_MANAGES_ZK值为false,为不使用默认ZooKeeper实例。
启动服务
需要先启动ZooKeeper(已经启动)和hdfs文件系统
注意:以下两个命令只需要在hadoop1下启动
start-hbase.sh
jps命令查看多了 HRegionServer
修改系统时间使系统时间同步,负责HRegionServer进程会过一会死掉。
/etc/rc.local
末尾加入一行,同步主节点时间,主节点不用配:
ntpdate 192.168.0.2
f测试
hbase shell
hbase(main):001:0> status
hbase(main):001:0> create ‘student’,’name’,’age’
hbase(main):001:0> desc ‘student’
hbase(main):001:0> put ‘student’,’1’,’name’,’mapengbo’
hbase(main):001:0> put ‘student’,’1’,’age,’26’
hbase(main):001:0> get ‘student’,’1’,
8. Mysql安装
mkdir –p /home/tools
将MySQL-server-5.5.21-1.linux2.6.x86_64.rpm,MySQL-client-5.5.21-1.linux2.6.x86_64.rpm
复制到/home/tools下
安装服务端:
rpm -ivhMySQL-server-5.1.7-0.i386.rpm
安装客户端:
rpm -ivhMySQL-client-5.1.7-0.i386.rpm
cp/usr/share/mysql/my-medium.cnf /etc/my.cnf
1、数据库目录
/var/lib/mysql/
2、配置文件
/usr/share/mysql(mysql.server命令及配置文件)
3、相关命令
/usr/bin(mysqladmin mysqldump等命令)
4、启动脚本
/etc/rc.d/init.d/(启动脚本文件mysql的目录)
3、自动启动(默认自动添加到自启动,不用操作)
1)察看mysql是否在自动启动列表中
[root@test1 local]# /sbin/chkconfig--list | grep mysql
2)把MySQL添加到你系统的启动服务组里面去
[root@test1local]# /sbin/chkconfig --add mysql
3)把MySQL从启动服务组里面删除。
[root@test1local]# /sbin/chkconfig --del mysql
登录MySQL的命令是mysql, mysql 的使用语法如下:
mysql [-uusername] [-h host] [-p[password]] [dbname]
username 与 password 分别是 MySQL 的用户名与密码,mysql的初始管理帐号是root,没有密码,注意:这个root用户不是Linux的系统用户。MySQL默认用户是root,由于初始没有密码,第一次进时只需键入mysql即可
增加了密码后的登录格式如下:
mysql -u root -p
Enter password: (输入密码)
其中-u后跟的是用户名,-p要求输入密码,回车后在输入密码处输入密码。
9. hive安装
将apache-hive-0.13.1-bin.tar.gz 复制到/home/hadoop/
解压:tar zxvf apache-hive-0.13.1-bin.tar.gz
mv apache-hive-0.13.1-bin /home/hadoop/hive
cp mysql-connector-java-5.0.3.jar /home/hadoop/hive/lib
进入解压后的hive目录,进入conf
cp hive-env.sh.template hive-env.sh
cp hive-default.xml.template hive-site.xml
配置hive-env.sh
HADOOP_HOME=/home/hadoop/hadoop
export HIVE_CONF_DIR=/home/hadoop/hive/conf
export HIVE_AUX_JARS_PATH=/home/hadoop/hive/lib
保存退出
source /hive-env.sh
hdfs dfs -mkdir -p /usr/hive/warehouse
hdfsdfs -mkdir -p /usr/hive/tmp
hdfsdfs -mkdir -p /usr/hive/log
hdfsdfs -chmod g+w /usr/hive/warehouse
hdfsdfs -chmod g+w /usr/hive/tmp
hdfsdfs -chmod g+w /usr/hive/log
cp hive-default.xml.template hive-site.xml
vi hive-site.xml
(这里就与前面的hdfsdfs -mkdir -p /usr/hive/warehouse相对应,其中node0指的是笔者的NameNode的hostname;)
javax.jdo.option.ConnectionURL这个参数使用来设置元数据连接字串
这个javax.jdo.option.ConnectionUserName
是用来设置hive存放的元数据的数据库(这里是mysql数据库)的用户名称的。
而这个‘hive‘可以根据用户自己的需要来自行设置
--------------------------------------
这个javax.jdo.option.ConnetionPassword是用来设置,
用户登录数据库的时候需要输入的密码的。
修改属性名称hive.metastore.ds.retry.attempts 为hive. hmshandler.retry.attempts
修改属性名称hive.metastore.ds.retry.interval 为hive. hmshandler.retry. interval
负责会报错:hive error resoled "DEPRECATED: hive.metastore.ds.retry.* nolonger has any effect. Use hive.hmshandler.retry.* instead"
保存退出。
hbase的lib下找到下面4个文件拷贝到hive的lib目录下。
protobuf-java-2.5.0.jar
hbase-client-0.96.2-hadoop2.jar
hbase-common-0.96.2-hadoop2.jar
guava-12.0.1.jar
启动之前先要创建hive元数据存放的路径文件:
hdfsdfs -mkdir -p /hive/scratchdir
hdfsdfs -mkdir /tmp
hdfsdfs -ls /hive
hdfsdfs -chmod -R g+w /hive/
hdfsdfs -chmod -R g+w /tmp
创建hive连接的用户,和hive存放元数据的数据库,如下:
GRANT ALL PRIVILEGES ON *.* TO 'hive'@'%'IDENTIFIED BY '123456' ;
mysql> create database hive defaultcharacter set latin1; //字符集必须是latian1,如果是utf8则很多hive元数据表无法创建。
具体的启动命令:
./hive
hive运行测试:
进入hive客户端,运行showtable;查看表的情况。
运行:
创建本地表,非hbase对应表
create table test(key int,amount string) rowformat delimited fields
terminated by '\t' lines terminated by '\n'stored as textfile;
load data local inpath '/usr/test.txt'overwrite into table test;
vi /usr/test.txt
1,abd
2,ddf
运行:
来创建于hbase关联的表,这样在hbaseshell下也能看到,两笔新增数据都能实时看到。
CREATE TABLE hivetest(key int, val string)STORED BY
'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITHSERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf1:val")
TBLPROPERTIES ("hbase.table.name" ="hivetest");
CREATE EXTERNAL TABLE hive_award(keystring, productid int,matchid string, rank string, tourneyid string, useridbigint,gameid int,gold int,loginid string,nick string,plat string) STORED BY'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES("hbase.columns.mapping" = ":key,info:MPID,info:MatchID,info:Rank,info:TourneyID,info:UserId,info:gameID,info:gold,info:loginId,info:nickName,info:platform")TBLPROPERTIES("hbase.table.name" = "award");
注意:1.如果要insert与hbase整合的表,不能像本地表一样load,需要利用已有的表进行,
如insertoverwrite table hivetest select * from test;
其中test的语句(createtable test4(key int,val string) row format delimited fields terminated by '\t'lines terminated by '\n' stored as textfile; ),
注意类型要一致,否则用insertoverwrite table hivetest select * from test; 导不进去数据
2.在hive中的 修改能同步反应到hbase中,但是如果在hbase中对新的列做了数据修改,
则不会反应到hive中,因为hive的原数据文件并没有更新。
10. Pig安装
将pig-0.13.0.tar.gz 复制到/home/hadoop/
解压:tar zxvf pig-0.13.0.tar.gz
mv pig-0.13.0 /home/hadoop/pig
vi /etc/profile
export PIG_HOME=/home/hadoop/pig
export PIG_CLASSPATH=/home/hadoop/hadoop/conf/
export PATH=$PIG_HOME/bin:$PATH
Pig有两种模式:
第一种是Local mode,也就是本地模式,这种模式下Pig运行在一个JVM里,访问的是本地的文件系统,只适合于小规模数据集,一般是用来体验Pig。而且,它并没有用到Hadoop的Local runner,Pig把查询转换为物理的Plan,然后自己去执行。在终端下输入% pig -x local就可以进入Local模式了。
第二种Hadoop模式,这种模式下,Pig才真正的把查询转换为相应的MapReduceJobs,并提交到Hadoop集群去运行,集群可以是真实的分布式也可以是伪分布式。
cd /home/hadoop/pig/bin
./pig
Grunt>ls /
列出hdfs文件
读取hdfs文件按“,”分割tables = LOAD '/home/test.txt' USING PigStorage(',') AS (carno,date, addno);
排序ordered = ORDER tables BY carno, date;
取前10行subtables = LIMIT ordered 10;
在控制台输出DUMP subtables;
文件输出STORE subtables INTO '/Results';
http://blog.csdn.net/poisonchry/article/details/31486315
11. Sqoop安装
将sqoop-1.99.4-bin-hadoop200.tar.gz复制到/home/hadoop/
解压:tar zxvf sqoop-1.99.4-bin-hadoop200.tar.gz
mv sqoop-1.99.4-bin-hadoop200 /home/hadoop/sqoop
vi /etc/profile
export SQOOP_HOME=/home/hadoop/sqoop
export PATH=$SQOOP_HOME/bin:$PATH
export CATALINA_HOME=$SQOOP_HOME/server
export LOGDIR=$SQOOP_HOME/logs
保存退出即时生效:
source /etc/profile
修改sqoop配置:
vi /home/hadoop/sqoop/server/conf/sqoop.properties
修改指向我的hadoop安装目录
org.apache.sqoop.submission.engine.mapreduce.configuration.directory=/home/hadoop/hadoop/
#把hadoop目录下的jar包都引进来
vi /home/hadoop/sqoop/server/conf/catalina.properties
common.loader=/home/hadoop/hadoop/share/hadoop/common/*.jar,/home/hadoop/hadoop/share/hadoop/common/lib/*.jar,/home/hadoop/hadoop/share/hadoop/hdfs/*.jar,/home/hadoop/hadoop/share/hadoop/hdfs/lib/*.jar,/home/hadoop/hadoop/share/hadoop/mapreduce/*.jar,/home/hadoop/hadoop/share/hadoop/mapreduce/lib/*.jar,/home/hadoop/hadoop/share/hadoop/tools/*.jar,/home/hadoop/hadoop/share/hadoop/tools/lib/*.jar,/home/hadoop/hadoop/share/hadoop/yarn/*.jar,/home/hadoop/hadoop/share/hadoop/yarn/lib/*.jar,/home/hadoop/hadoop/share/hadoop/httpfs/tomcat/lib/*.jar
在/home/hadoop/sqoop/lib 加入mysql驱动包
mysql-connector-java-5.0.3.jar
启动/停止sqoop200
./sqoop.shserver start/stop
查看启动日志:
cd /home/hadoop/sqoop
vim catalina.out
进入客户端交互目录
./sqoop.sh client
查看版本
show version –all
显示连接器:show connector –all
创建数据库连接:create connection --cid 1
创建导入任务 create job --xid 1 --type import
查看导入状态:status job --jid 1
12. eclipse安装
cp eclipse-SDK-4.3.1-linux-gtk-x86_64.tar.gz /home/hadoop/tools
tar –zxvf eclipse-SDK-4.3.1-linux-gtk-x86_64.tar.gz
将hadoop-eclipse-plugin-2.5.0.jar 复制到/home/hadoop/tools/eclipse/plugins/
接下来在桌面添加eclipse的启动快捷方式
在linux桌面空白处,点击鼠标右键,弹出一个对话框,选择“create launcher”,--“创建快捷方式“对话框---名字:eclipse –命令:/home/hadoop/tools/eclipse/eclipse 浏览到安装eclipse目录,找到eclipse启动程序---点击图标到这里我们已经配置成功了.
进入Window-->Preference选择 “Hadoop Map/Reduce”配置根目录:
进入Window-->OpenPerspective-->other-->Map/Reduce打开Map/Reduce窗口
打开Map/Reduce View,右键,选择Newhadoop location
配置location
注意:MR Master和DFS Master配置必须和mapred-site.xml和core-site.xml等配置文件一致
新建Mapreduce项目
创建MapReduce程序
编写WordCount程序测试插件使用:
在MapReduce工程下新建WordCount.java程序
将程序放在hadoop集群上运行:右键-->Runas-->Run on Hadoop,最终的输出结果会在HDFS相应的文件夹下显示。