docker
1、下载docker镜像
docker pull registry.cn-hangzhou.aliyuncs.com/kaibb/hadoop:latest
注:此镜像为阿里云个人上传镜像,比较符合目前我的需求,镜像为搭建好的hadoop环境,见https://dev.aliyun.com/detail.html?spm=5176.1972343.2.14.Q2Swxa&repoId=4030
2、运行docker镜像
docker run -itd --name hadoop -h hadoop -P registry.aliyuncs.com/kaibb/hadoop
3、查看容器运行状态
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
733301fddfa5 registry.aliyuncs.com/kaibb/hadoop "/usr/sbin/sshd -D" 6 seconds ago Up 4 seconds 0.0.0.0:32783->22/tcp, 0.0.0.0:32782->2122/tcp, 0.0.0.0:32781->8030/tcp, 0.0.0.0:32780->8031/tcp, 0.0.0.0:32779->8032/tcp, 0.0.0.0:32778->8033/tcp, 0.0.0.0:32777->8040/tcp, 0.0.0.0:32776->8042/tcp, 0.0.0.0:32775->8088/tcp, 0.0.0.0:32774->19888/tcp, 0.0.0.0:32773->49707/tcp, 0.0.0.0:32772->50010/tcp, 0.0.0.0:32771->50020/tcp, 0.0.0.0:32770->50070/tcp, 0.0.0.0:32769->50075/tcp, 0.0.0.0:32768->50090/tcp hadoop
注:显示的信息比较乱,这里把主要信息解释一下。当前容器映射出几个不同的端口,表格如下:
- 32783->22 - 32782->2122 - 32781->8030 - 32780->8031 - 32779->8032 - 32778->8033 - 32777->8040 - 32776->8042 - 32775->8088 - 32774->19888 - 32773->49707 - 32772->50010 - 32771->50020 - 32770->50070 - 32769->50075 - 32768->50090
如果之后容器外想访问容器的某个端口时,只需要访问容器ip+映射端口即可
4、进入容器
docker exec -it hadoop bash //格式化namenode hadoop安装在/opt/tools下,因为己经加了执行目录的环境变量,所以在任何目录下运行hadoop命令都可以
hadoop
1、配置hadoop伪分布模式
由于此docker镜像已经进行了相关配置,故可直接跳过配置过程,直接启动服务。可以跳过此部分
Hadoop 可以在单节点上以所谓的伪分布式模式运行,此时每一个 Hadoop 守护进程都作为一个独立的 Java 进程运行。
修改如下配置文件,文件地址位于hadoop的安装目录下,此容器中的位置为:/opt/tools/hadoop/etc/hadoop/
etc/hadoop/core-site.xml:
<configuration> <!-- 配置hdfs的namenode的地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> </configuration>
etc/hadoop/hdfs-site.xml:
<configuration> <!--指定hdfs存储数据的副本数量--> <property> <name>dfs.replication</name> <value>1</value> </property> <!--指定datanode的存储地--> <property> <name>dfs.datanode.data.dir</name> <value>file:/hadoop/data</value> </property> <!--指定namenode的存储地--> <property> <name>dfs.namenode.name.dir</name> <value>file:/hadoop/name</value> </property> </configuration>
etc/hadoop/mapred-site.xml
<configuration> <!--指定mapreduce编程模型运行在yarn上--> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
etc/hadoop/yarn-site.xml
<configuration> <!--mapreduce执行shuffle时获取数据的方式--> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration>
2、格式化一个新的分布式文件系统:
bin/hdfs namenode -format
当看到 INFO common.Storage: Storage directory /hadoop/name has been successfully formatted.
的信息就表示格式化成功,一般不成功的情况多为xml配置有误。
3、启动 NameNode 守护进程和 DataNode 守护进程:
./sbin/start-dfs.sh jps //列出本机所有java进程的pid,显示如下内容则表示成功 root@hadoop:/opt/tools/hadoop# jps 609 Jps 210 NameNode 307 DataNode 494 SecondaryNameNode
4、启动yarn进程
./sbin/start-yarn.sh jps //此时yarn进程已开 210 NameNode 915 Jps 307 DataNode 667 ResourceManager 494 SecondaryNameNode 766 NodeManager