初识:
Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的硬件上;而且它提供高吞吐量来访问应用程序的数据,适合那些有着超大数据集的应用程序。HDFS放宽了POSIX的要求,可以以流的形式访问文件系统中的数据。
网络配置
master: 10.1.1.10 slave1: 10.1.1.11 slave2: 10.1.1.12
一台机器作为master另外两台是slave,接着在/etc/hosts中把所有集群的主机信息都写进去。
Vim /etc/hosts #修改主机与IP的映射关系 添加到/etc/hosts的最后面 10.1.1.10 master 10.1.1.11 slave1 10.1.1.12 slave2
配置好后可以在各个主机上进行ping master和ping slave1/slave2测试一下,是否相互ping得通。
SSH 无密登录
下面是我写的一个自动化SSH 无密登录脚本,运行脚本前需要安装expect包,ubuntu 系统下直接执行:sudo apt-get install expect就可以了。该脚本运行在namenode上,运行时只需要将IP_1改成对应的datanode地址,PWD_1是对应datanode密码。 #!/bin/sh IP_1=10.1.1.10, 10.1.1.11, 10.1.1.12 PWD_1=123456
key_generate() {
expect -c "set timeout -1;
spawn ssh-keygen -t dsa;
expect {
{Enter file in which to save the key*} {send -- \r;exp_continue}
{Enter passphrase*} {send -- \r;exp_continue}
{Enter same passphrase again:} {send -- \r;exp_continue}
{Overwrite (y/n)*} {send -- n\r;exp_continue}
eof {exit 0;}
};"
}
auto_ssh_copy_id () {
expect -c "set timeout -1;
spawn ssh-copy-id -i $HOME/.ssh/id_dsa.pub root@$1;
expect {
{Are you sure you want to continue connecting *} {send -- yes\r;exp_continue;}
{*password:} {send -- $2\r;exp_continue;}
eof {exit 0;}
};"
}
rm -rf ~/.ssh
key_generate
ips_1=$(echo $IP_1 | tr ',' ' ')
for ip in $ips_1
do
auto_ssh_copy_id $ip $PWD_1
done
eval &(ssh-agent)
ssh-add
安装JDK
http://bighug.top/2016/10/18/jdk%E5%AE%89%E8%A3%85/
安装HADOOP
解压hadoop包到
配置
配置/data/service/hadoop-2.7.0/etc/hadoop目录下的core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
</configuration>
配置/data/service/hadoop-2.7.0/etc/hadoop目录下的hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9001</value>
</property>
</configuration>
配置/data/service/hadoop-2.7.0/etc/hadoop目录下的mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
</configuration>
配置/data/service/hadoop-2.7.0/etc/hadoop目录下的yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<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>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
</configuration>
修改环境变量
配置/data/service/hadoop-2.7.0/etc/hadoop目录下hadoop-env.sh、yarn-env.sh的JAVA_HOME,不设置的话
export JAVA_HOME=/usr/jdk1.8.0_65
修改slave文件
配置/data/service/hadoop-2.7.0/etc/hadoop目录下的slaves,删除默认的localhost,增加2个从节点,
h-slave1
h-slave2
复制节点
将配置好的Hadoop复制到各个节点对应位置上,通过scp传送
scp -r hadoop-2.7.0 slave1:/data/service/
scp -r hadoop-2.7.0 slave2:/data/service/
启动服务
在Master服务器启动hadoop,从节点会自动启动,进入/home/hadoop/hadoop-2.7.0目录
(1)初始化,输入命令
bin/hdfs namenode –format
……..
16/10/18 00:07:34 INFO common.Storage: Storage directory /data/hdfs/dfs/name has been successfully formatted.
16/10/18 00:07:35 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0
16/10/18 00:07:35 INFO util.ExitUtil: Exiting with status 0
16/10/18 00:07:35 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at localhost/127.0.0.1
************************************************************/ 只要出现“successfully formatted”就表示成功了。
(2)执行启动
全部启动sbin/start-all.sh,也可以分开sbin/start-dfs.sh、sbin/start-yarn.sh
(3)停止的话
输入命令,sbin/stop-all.sh
[root@localhost hadoop-2.7.0]# sbin/start-all.sh
This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh
Incorrect configuration: namenode address dfs.namenode.servicerpc-address or dfs.namenode.rpc-address is not configured.
Starting namenodes on []
slave-02: starting namenode, logging to /data/hadoop-2.7.0/logs/hadoop-root-namenode-localhost.out
slave-03: starting namenode, logging to /data/hadoop-2.7.0/logs/hadoop-root-namenode-localhost.out
localhost: starting namenode, logging to /data/hadoop-2.7.0/logs/hadoop-root-namenode-localhost.out
slave-02: starting datanode, logging to /data/hadoop-2.7.0/logs/hadoop-root-datanode-localhost.out
slave-03: starting datanode, logging to /data/hadoop-2.7.0/logs/hadoop-root-datanode-localhost.out
localhost: starting datanode, logging to /data/hadoop-2.7.0/logs/hadoop-root-datanode-localhost.out
Starting secondary namenodes [0.0.0.0]
0.0.0.0: starting secondarynamenode, logging to /data/hadoop-2.7.0/logs/hadoop-root-secondarynamenode-localhost.out
starting yarn daemons
starting resourcemanager, logging to /data/hadoop-2.7.0/logs/yarn-root-resourcemanager-localhost.out
slave-02: starting nodemanager, logging to /data/hadoop-2.7.0/logs/yarn-root-nodemanager-localhost.out
slave-03: starting nodemanager, logging to /data/hadoop-2.7.0/logs/yarn-root-nodemanager-localhost.out
localhost: starting nodemanager, logging to /data/hadoop-2.7.0/logs/yarn-root-nodemanager-localhost.out
(4)验证
输入命令,jps,可以看到相关信息
master
[root@localhost hadoop-2.7.0]# jps
15376 Jps
15074 NodeManager
14963 ResourceManager
12766 QuorumPeerMain
Slave1
[root@localhost ~]# jps
13184 NodeManager
12420 QuorumPeerMain
13303 Jps
Slave2
[root@localhost ~]# jps
13376 Jps
13256 NodeManager
12458 QuorumPeerMain
Web访问
要先开放端口或者直接关闭防火墙
(1)浏览器打开http://ip:8088/ 能显示你的集群状态
(2)浏览器打开http://ip:50070/ 能进行一些节点的管理
除此之外,还有很多有用的端口,当然这也是和你的配置文件相关的
安装完成。
到这里为止,你已经完成了第一个任务的分布式计算, 这只是大数据应用的开始,之后的工作就是,结合自己的情况,编写程序调用Hadoop的接口,发挥hdfs、mapreduce的作用。 注意:在你重新格式化分布式文件系统之前,需要将文件系统中的数据先清除,否则,datanode将创建不成功,这一点很重要
文件操作
Hadoop使用的是HDFS,能够实现的功能和我们使用的磁盘系统类似。并且支持通配符,如*。
查看文件列表
./bin/hadoop fs -ls /test ## 创建文件目录 ##
./bin/hadoop fs -mkdir /test ## 删除文件 ##
./bin/hadoop fs -rm /test/index.jsp ## 上传文件 ##
./bin/hadoop fs -put /opt/index.jsp /test ## 下载文件 ##
./bin/hadoop fs -get /test/index.jsp /opt/index.jsp ## 查看文件内容 ##
./bin/hadoop fs -cat /test/index.jsp