使用docker安装hadoop2.7.7

官方的安装文档
https://hadoop.apache.org/docs/r2.7.7/hadoop-project-dist/hadoop-common/ClusterSetup.html
由于线上使用docker, 所以需要打包成docker镜像.

具体的步骤:

基础镜像

选用和当服务器一致的ubuntu16.04, 安装vim和tzdata, 并设置时区为东8区.
sources.list是软件源, 可以从主机上复制过来.

FROM ubuntu:16.04
COPY sources.list /etc/apt/
RUN apt update
RUN apt install -y vim tzdata
RUN rm /etc/localtime && ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "Asia/Shanghai" > /etc/timezone
ENV TZ="Asia/Shanghai"

安装JDK

WORKDIR /
COPY jdk1.8.0_171 /jdk1.8.0_171
ENV JAVA_HOME=/jdk1.8.0_171
RUN ln -s /jdk1.8.0_171/bin/java /usr/bin/java

安装hadoop2.7.7

WORKDIR /hadoop
COPY hadoop-2.7.7 .
ENV HADOOP_PREFIX=/hadoop
ENV HADOOP_CONF_DIR=/hadoop/etc/hadoop

创建配置文件

将hadoop2.7.7/etc/hadoop目录复制到/home/mo/sjfx-hadoop-data/config, 这个目录作为hadoop的配置目录 ,以后修改配置时就修改这个目录下面的文件.
修改core-site.xml, 配置hdfs地址, 属性fs.defaultFS配置为namenode所在的服务器地址

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://192.168.1.26:9000</value> 
    </property>
</configuration>

修改hdfs-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/hadoop_data/hdfs/namenode</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
       <value>/hadoop_data/hdfs/datanode</value>
    </property>
   <!-- 让datanode可以使用ip -->
    <property>
        <name>dfs.namenode.datanode.registration.ip-hostname-check</name>
        <value>false</value>
    </property>
</configuration>

格式化namenode

在启动namenode之前, 需要格式化namenode数据
注意要将hadoop的logs, data和config目录映射出来

#/bin/sh
docker stop sjfxhadoop-namenode
docker rm sjfxhadoop-namenode
docker run -it --name sjfxhadoop-namenode --net=host \
  -v /home/mo/sjfx-hadoop-data/data:/hadoop_data \
  -v /home/mo/sjfx-hadoop-data/logs:/hadoop/logs \
  -v /home/mo/sjfx-hadoop-data/config:/hadoop/etc/hadoop \
   sjfxhadoop:v1 sh -c "/hadoop/bin/hdfs namenode -format sjfx-cluster"

#启动namenode
使用主机网络模式
注意hadoop-daemon.sh启动的程序会自动退出, 为了防止容器主进程结束, 使用tail -f /dev/null来阻塞.

#/bin/sh
docker stop sjfxhadoop-namenode
docker rm sjfxhadoop-namenode
docker run -d --name sjfxhadoop-namenode --net=host \
  -v /home/mo/sjfx-hadoop-data/data:/hadoop_data  \
  -v /home/mo/sjfx-hadoop-data/logs:/hadoop/logs \
  -v /home/mo/sjfx-hadoop-data/config:/hadoop/etc/hadoop \
  sjfxhadoop:v1 sh -c "/hadoop/sbin/hadoop-daemon.sh --script hdfs start namenode  && tail -f /dev/null"

启动后查看日志目录中的启动日志有无异常.
然后可以访问http://192.168.1.26:50070, 查看namenode相关信息

#启动datanode

#/bin/sh
docker stop sjfxhadoop-datanode
docker rm sjfxhadoop-datanode
docker run -d --name sjfxhadoop-datanode --net=host \
  -v /home/mo/sjfx-hadoop-data/data:/hadoop_data  \
  -v /home/mo/sjfx-hadoop-data/logs:/hadoop/logs \
  -v /home/mo/sjfx-hadoop-data/config:/hadoop/etc/hadoop \
  sjfxhadoop:v1 sh -c "/hadoop/sbin/hadoop-daemon.sh --script hdfs start datanode  && tail -f /dev/null"

#测试
将日志文件上传到hdfs

./hadoop-2.7.7/bin/hadoop fs -mkdir hdfs://192.168.1.26:9000/sjfxlogs

出现错误:
mkdir: Permission denied: user=mo, access=WRITE, inode="/":root:supergroup:drwxr-xr-x
是因为当前用户是mo, 而数据目录要求用户是root才能访问, 在hdfs-site.xml关闭权限检查,并重启namenode即可.

    <property>
        <name>dfs.permissions.enabled</name>
        <value>false</value>
    </property>

创建/sjfx目录之后, 可以放入日志文件

./hadoop-2.7.7/bin/hadoop fs -put ~/sjfxlogs/bak/2019-05-31/gateway-json-2019-05-31-1.log hdfs://192.168.1.26:9000/sjfxlogs/

查看文件

./hadoop-2.7.7/bin/hadoop fs -ls hdfs://192.168.1.26:9000/sjfxlogs

Found 1 items
-rw-r–r-- 3 mo supergroup 1004671801 2019-06-04 13:58 hdfs://192.168.1.26:9000/sjfxlogs/gateway-json-2019-05-31-1.log

#总结

  1. 使用ubuntu16.04做为基础镜像, 并安装了tzdata和vim, 处理时区问题和编辑文件, 然后安装了JDK, 安装了hadoop-2.7.7.
  2. 从原来的hadoop-2.7.7目录中复制了一份配置文件出来, 并且修改了其中的配置, 这个将要放到每台运行hadoop的机器上去, 后期可以使用git或者rsync来同步配置.
  3. 创建了格式化namenode的脚本
  4. 创建了启动namenode和datanode的脚本, 在脚本中把数据,日志和配置三个目录映射到外部.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用Docker安装Hadoop集群的步骤如下: 1. 首先,使用以下命令在Docker中创建三个独立的Hadoop容器: ``` docker run -itd --network hadoop --name hadoop1 hadoop docker run -itd --network hadoop --name hadoop2 hadoop docker run -itd --network hadoop --name hadoop3 hadoop ``` 这些命令会在Docker网络中创建三个名为hadoop1、hadoop2hadoop3的容器,并使用预先构建的Hadoop镜像。 2. 接下来,我们需要进入每个Hadoop容器并进行配置。使用以下命令进入每个容器: ``` docker exec -it hadoop1 bash docker exec -it hadoop2 bash docker exec -it hadoop3 bash ``` 这些命令将进入到hadoop1、hadoop2hadoop3容器的命令行界面。 3. 在每个Hadoop容器中,您可以按照正常的Hadoop安装和配置步骤进行操作。具体来说,您可以编辑相应的配置文件,如core-site.xml、hdfs-site.xml和mapred-site.xml等,以配置IP地址映射和其他必要的Hadoop参数。配置完毕后,保存并退出容器。 通过以上步骤,您可以使用Docker安装Hadoop集群。请注意,这只是一个基本的示例,您可能需要根据您的实际需求进行适当的修改和配置。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [[零基础]用docker搭建Hadoop集群](https://blog.csdn.net/weixin_56114243/article/details/127937607)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值