1 环境准备
1.1 JDK安装
1.1.1 版本
使用1.7或1.7以上版本的JDK
1.1.2 安装
解压环境包:tar -zxvf jdk-7.tgz
移动到/data/下:mvjdk1.7 /data/jdk
1.1.3 环境变量
执行命令 vi /etc/profile, 添加变量:
export JAVA_HOME=/data/jdk
export PATH=$PATH:$JAVA_HOME/bin
exportCLASSPATH=.:$JAVA_HOME/jre/lib/:$JAVA_HOME/lib/
执行命令: source /etc/profile使修改后的profile文件生效。
1.1.4 验证
执行命令:java -version 成功显示java版本,则没有问题。
1.2 设置host
执行命令 vi /etc/hosts,添加下面内容:
192.168.4.100 corenode
1.3 ssh免密码设置
1.3.1 安装
执行下面的命令:
ssh-keygen -t dsa -P '' -f~/.ssh/id_dsa
解释:ssh-keygen 代表生成密钥;-t 表示指定生成的密钥类型;dsa 是dsa密钥认证的意思; -P 用于提供密语(接着后面是两个单引号,不要打错);-f 表示指定生成密钥文件。
这条命令完成后,会在当前文件夹下面的 .ssh 文件夹下创建 id_dsa和 id_dsa.pub 两个文件,这是 SSH 的一对私钥和公钥,把id_dsa.pub (公钥)追加到授权的key 中去,输入如下命令:
cat ~/.ssh/id_dsa.pub >>~/.ssh/authorized_keys
1.3.2 验证
输入口令用ssh登录corenode:
ssh corenode
显示登录成功信息即可。
1.4 zookeeper
1.4.1 版本
zookeeper-3.4.5
1.4.2 安装
解压环境包: tar -xvfzookeeper-3.4.5.tar.gz
移动到/data/下: mv zookeeper-3.4.5 /data/zookeeper
创建默认配置文件: cp/data/zookeeper/conf/zoo_sample.cfg /data/zookeeper/conf/zoo.cfg
1.4.3 添加环境变量
执行命令 vi /etc/profile,添加变量:
exportZOOKEEPER_HOME=/data/zookeeper
exportPATH=$PATH:$ZOOKEEPER_HOME/bin
执行命令: source/etc/profile使修改后的profile文件生效
1.4.4 添加host
执行命令: vim /etc/hosts 添加每台地址主机名:
192.168.3.201 corenode
192.168.3.202 datanode01
192.168.3.203 datanode02
1.4.5 创建myid文件
在${dataDir}目录中执行命令: echo ""1"" > myid ,其中""1""表示此服务器的编号.
该数字必须和zoo.cfg文件中的server.X中的X一一对应.
集群安装时,每个节点上都要生成myid的文件,且编号不能相同.
例: 假如刚才设置的是节点1上的.那么:
节点2上: #echo ""2"" >/data/zookeeper/myid
节点3上: #echo ""3"" >/data/zookeeper/myid
1.4.6 关键配置参数(zoo.cfg)
配置文件在conf文件夹中,将zoo_sample.cfg改名为zoo.cfg,并对其做如下修改:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper/data
dataLogDir=/data/zookeeper/logs
clientPort=2181
maxClientCnxns=300 (根据zookeeper管理的服务多少确定,默认值是60)
autopurge.snapRetainCount=3
autopurge.purgeInterval=1
#server.A=B:C:D
# A是一个数字,表示这是第几号服务器
#B是当前服务器的ID或者主机名
#C是Follower服务器与Leader服务器交换信息的端口
#D是当Leader挂掉时,重新选举Leader所使用的端口
server.1=corenode:2888:3888
server.2=datanode01:2888:3888
server.3=datanode02:2888:3888
1.4.7 启动zk
执行命令: ./zkServer.shstart &
1.4.8 验证安装是否成功
执行命令:jps 查看是否有QuorumPeerMain进程,如没有,则启动未成功。 查看/data/zookeeper/bin/目录上的zookeeper.out文件,排查未成功原因。
2 HADOOP
2.1 版本
到官方网站下载Hadoop稳定版本安装包:https://hadoop.apache.org。
目前使用的版本是:hadoop-2.5.2.tar.gz
2.2 安装
解压命令再啰嗦下:tar -zxvf hadoop-2.5.2.tar.gz
然后重命名:cp hadoop-2.5.2 /data/hadoop
2.3 文件句柄信息配置
执行如下的命令:
echo'* - nofile 65535' >> /etc/security/limits.conf
ulimit -n 65535
ulimit -n
2.4 环境变量
2.4.1 profile
执行命令 vi /etc/profile, 添加变量:
exportHADOOP_HOME=/data/hadoop
exportPATH=$HADOOP_HOME/sbin:$HADOOP_HOME/bin:$PATH
执行命令: source/etc/profile使修改后的profile文件生效。
2.4.2 hadoop-env.sh
执行命令 vi {HADOOP_HOME}/etc/hadoop/hadoop-env.sh,修改变量:
exportJAVA_HOME="/data/jdk" #设置java环境变量
export HADOOP_SSH_OPTS="-p 22080" #如果修改了SSH登录端口,一定要修改此配置。
2.5 验证
执行命令:hadoop version 成功展示hadoop的版本信息,则没有问题。
2.6 修改配置文件
{HADOOP_HOME}/etc/hadoop目录下伪分布的两个置文件:
core-site.xml:全局配置文件。
hdfs-site.xml:HDFS配置文件。
2.6.1 core-site.xml
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/data/hadoop/tmp</value>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://corenode:9000</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>65536</value>
</property>
<property>
<name>fs.trash.interval</name>
<value>1440</value>
</property>
</configuration>
2.6.2 hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.blocksize</name>
<value>268435456</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/data/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/data/hadoop/dfs/data</value>
</property>
</configuration>
2.6.3 格式化namenode
执行命令:hdfs namenode -format
成功的话,会看到“successfully formatted”和 “Exittingwith status 0”的提示,若为 “Exittingwith status 1”则是出错。如下图:
如果在这一步时提示 Error: JAVA_HOME is not set and could not be found. 的错误,则说明之前设置JAVA_HOME 环境变量那边就没设置好,请按教程先设置好 JAVA_HOME 变量,否则后面的过程都是进行不下去的。
2.7 启动HADOOP
执行命令:start-dfs.sh
若出现如下SSH提示,输入yes即可。
启动时可能会出现如下 WARN 提示:WARN util.NativeCodeLoader: Unable to load native-hadoop library foryour platform… using builtin-java classes where applicable。该 WARN 提示可以忽略,并不会影响正常使用(该 WARN 可以通过编译 Hadoop 源码解决)。
启动完成后,可以通过命令 jps 来判断是否成功启动,若成功启动则会列出如下进程: “NameNode”、”DataNode”和 “SecondaryNameNode”(如果SecondaryNameNode 没有启动,请运行 sbin/stop-dfs.sh 关闭进程,然后再次尝试启动尝试)。如果没有 NameNode 或 DataNode ,那就是配置不成功,请仔细检查之前步骤,或通过查看启动日志排查原因。
成功启动后,可以访问 Web 界面 http://corenode:50070 查看 NameNode 和 Datanode 信息,还可以在线查看HDFS 中的文件。
至此,hdfs已经可以使用。不启动yarn也可以,不会影响程序执行。
3 YARN
YARN是从 MapReduce 中分离出来的,负责资源管理与任务调度。YARN 运行于 MapReduce 之上,提供了高可用性、高扩展性。
上述通过./sbin/start-dfs.sh 启动 Hadoop,仅仅是启动了 MapReduce 环境,我们可以启动 YARN ,让 YARN 来负责资源管理与任务调度。
3.1 修改配置文件
以下两个配置文件均在{HADOOP_HOME}/etc/hadoop目录下。
3.1.1 mapred-site.xml
执行命令:
mv mapred-site.xml.template mapred-site.xml
vim mapred-site.xml,添加下面配置:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
3.1.2 yarn-site.xml
vim yarn-site.xml,添加下面配置:
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>corenode</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>4</value>
</property>
</configuration>
3.2 启动YARN
执行命令:
start-yarn.sh # 启动YARN
mr-jobhistory-daemon.sh starthistoryserver #开启历史服务器,才能在Web中查看任务运行
开启后通过 jps 查看,可以看到多了 NodeManager 和 ResourceManager 两个后台进程。
启动 YARN 之后,运行实例的方法还是一样的,仅仅是资源管理方式、任务调度不同。观察日志信息可以发现,不启用 YARN 时,是“mapred.LocalJobRunner”在跑任务,启用 YARN 之后,是“mapred.YARNRunner”在跑任务。启动 YARN 有个好处是可以通过 Web 界面查看任务的运行情况:http://corenode:8088/cluster。
但 YARN 主要是为集群提供更好的资源管理与任务调度,然而这在单机上体现不出价值,反而会使程序跑得稍慢些。因此在单机上是否开启 YARN 就看实际情况了。
4 HBASE
4.1 版本
目前使用的版本是:hbase-0.98.17-hadoop2-bin.tar.gz
4.2 安装
解压:tar -zxvf hbase-0.98.17-hadoop2-bin.tar.gz
然后重命名:cp hbase-0.98.17-hadoop2/data/hbase
4.3 环境变量
执行命令 vi /etc/profile,在文件最后添加变量:
exportHBASE_HOME=/data/hbase
exportPATH=$PATH:$HBASE_HOME/bin
执行命令:source/etc/profile使修改后的profile文件生效。
4.4 修改配置文件
4.4.1 hbase-env.sh
执行命令 vi { HBASE_HOME}/conf/hbase-env.sh,修改变量:
exportJAVA_HOME="/data/jdk" #设置java环境变量
exportHBASE_HEAPSIZE=4000 #默认是 1000
exportHBASE_OPTS="-XX:+UseConcMarkSweepGC"
export HBASE_SSH_OPTS="-p 22080" #如果修改了SSH登录端口,一定要修改此配置。
exportHBASE_PID_DIR=/data/hbase/pids
exportHBASE_MANAGES_ZK=false
4.4.2 hbase-site.xml
<property>
<name>hbase.rootdir</name>
<value> hdfs://corenode:9000/hbase</value>
<description> corenode:9000,需与core-site.xml中的fs.defaultFS一致!</description>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/data/hbase/zookeeperdata</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>data80</value>
</property>
<property>
<name>hbase.hregion.max.filesize</name>
<value>536870912000</value>
</property>
<property>
<name>hbase.hregion.memstore.flush.size</name>
<value>67108864</value>
</property>
<property>
<name>hbase.hstore.compaction.min</name>
<value>3</value>
</property>
<property>
<name>hbase.hstore.compaction.max</name>
<value>4</value>
</property>
<property>
<name>hbase.hregion.majorcompaction</name>
<value>0</value>
</property>
<property>
<name>hbase.regionserver.restart.on.zk.expire</name>
<value>true</value>
</property>
<property>
<name>zookeeper.session.timeout</name>
<value>180000</value>
</property>
4.5 启动HBASE
执行命令:start-hbase.sh
执行命令后,执行jps 命令会有HMaster和HRegionServer两个进程存在。
关闭命令:stop-hbse.sh
启动顺序:先启动Hadoop–>再启动HBase,关闭顺序:先关闭HBase–>再关闭Hadoop。