文章目录
容器使用
win10 docker下命令
docker run -tdi -p 8088:8088 -p 9000:9000 -p 9864:9864 -p 9866:9866 -p 9867:9867 -p 9870:9870 -p 19888:19888 -p 50100:50100 -p 50105:50105 --hostname localhost --privileged -e "container=docker" --name hadoopweifb registry.cn-hangzhou.aliyuncs.com/mkmk/hadoop:weifb3 init | docker exec hadoopweifb /bin/bash -c ' /starthadoop.sh '
linux 下启动hadoop命令
docker run -tdi -p 8088:8088 -p 9000:9000 -p 9864:9864 -p 9866:9866 -p 9867:9867 -p 9870:9870 -p 19888:19888 -p 50100:50100 -p 50105:50105 --hostname localhost --privileged -e "container=docker" --name hadoopweifb registry.cn-hangzhou.aliyuncs.com/mkmk/hadoop:weifb3 init && docker exec hadoopweifb /bin/bash -c ' /starthadoop.sh '
想要观察启动过程可以 删除掉 docker exec -d 的 -d 参数
然后就可以访问 ip:9870 端口 使用hadoop了
java 链接容器并操作
常见报错1
报错There are 1 datanode(s) running and 1 node(s) are excluded in t
端口没有打开完,
dfs.namenode.secondary.http-address 0.0.0.0:9868 The secondary namenode http server address and port.
dfs.namenode.secondary.https-address 0.0.0.0:9869 The secondary namenode HTTPS server address and port.
dfs.datanode.address 0.0.0.0:9866 The datanode server address and port for data transfer.
dfs.datanode.http.address 0.0.0.0:9864 The datanode http server address and port.
dfs.datanode.ipc.address 0.0.0.0:9867 The datanode ipc server address and port.
把这些端口全部打开
写入中文有乱码
如果使用
FSDataOutputStream 对象的 writebetys() 会出现中文乱码
请更换为 write(str对象.getBytes());
org.apache.hadoop.fs.FSDataOutputStream a = fileSystem.create(filepath1);
fileSystem.setReplication(filepath1, (short) 1);
a.write(inner.getBytes());
备份数不足
fileSystem.setReplication(filepath1, (short) 1);
设置文件备份数为 1
python 链接容器并操作
这里注意 python 链接 hdfs 使用的是 9870 hadoop3 namenode http 端口
import pyhdfs
fs_conn=pyhdfs.HdfsClient(hosts="localhost:9870",user_name="hadoop")
fs_conn.listdir('/')
#fs_conn 是一个 <pyhdfs.HdfsClient at 0x203d1d787b8>
#输出:【】
以下是构建过程
不想自己构建的,直接拖拽使用就好了
遇到的一个环境变量bug解决
从外部直接启动docker 容器遇到以下问题, 容器内 ssh 服务未启动
Last login: 三 3月 4 17:34:31 CST 2020 on pts/6
Starting datanodes
localhost: ssh: connect to host localhost port 22: Connection refused
尝试启动ssh服务,又得到了另一个错误
Failed to get D-Bus connection: No such file or directory
解决方法
为docker 添加参数 --privileged -e “container=docker”
(docker run -tdi -p 22345:12345 --privileged -e "container=docker" --name hadoopweifb10 registry.cn-hangzhou.aliyuncs.com/mkmk/hadoop:weifb3 init ) && (docker exec hadoopweifb10 /bin/bash -c ' systemctl start sshd.service && source /etc/profile && nohup start-all.sh & ')
D-BUS为了两个特定情况而设计:
同一个桌面会话中两个桌面应用程序的通信,可使得桌面会话作为整体集成在一起以解决进程生命周期的相关问题。 桌面会话和操作系统的通信,这里操作系统一般而言包括内核和系统守护进程。
退出docker后
$ docker run --privileged -ti -e “container=docker” centos7-base /usr/sbin/init
构建容器
拖取 centos:ssh镜像
docker run -tdi -P --privileged=true --name hadoopweifb registry.cn-hangzhou.aliyuncs.com/mkmk/centos:ssh init
进入容器检查配置
docker exec -it hadoopweifb /bin/bash
检查字体
locale
字体正常
LC_ALL=zh_CN.UTF-8
查看ssh服务有没有运行,
ps -ef | grep ssh
如果有,可以看到类似以下内容:
root 142 1 0 16:06 ? 00:00:00 /usr/sbin/sshd -D
root 199 142 0 16:09 ? 00:00:00 sshd: root@pts/1,pts/2
root 215 199 0 16:09 ? 00:00:00 /usr/libexec/openssh/sftp-server
root 1122 765 0 16:12 pts/3 00:00:00 grep --color=auto ssh
检查时间
[root@abd518ea708e /]# date
2020年 03月 04日 星期三 16:12:56 CST
一切正常
更新一下镜像源
CentOS7更换镜像源
#先安装wget
yum install -y wget
#下载CentOS 7的repo文件
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
#进行更新镜像源
#清除缓存
yum clean all
#生成缓存
yum makecache
#最后执行命令
yum -y update
yum -y upgrade
配置java 环境
yum -y install java-devel
安装完成输出
java -version
openjdk version "1.8.0_242"
OpenJDK Runtime Environment (build 1.8.0_242-b08)
OpenJDK 64-Bit Server VM (build 25.242-b08, mixed mode)
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.el7_7.x86_64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
生成ssh密钥
ssh-keygen -t rsa
成功生成密匙
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
直接重新配置本地免密登录
如果找不到 chattr 命令
yum install e2fsprogs
touch /root/.ssh/authorized_keys
bash ssh not found
yum -y install openssh-clients
(chattr -i /root/.ssh/authorized_keys) && (rm -rf /root/.ssh) && (mkdir /root/.ssh) && (ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa) && (cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys) && (chmod 700 ~/.ssh) && (chmod 644 ~/.ssh/authorized_keys) && (ssh localhost -o StrictHostKeyChecking=no)
检测本地免密登陆是否成功
ssh localhost
Last login: Wed Mar 4 16:44:05 2020 from localhost
搭建伪分布式环境
修改容器主机名称为localhost,这是一个大坑!!
hadoop 所有搭建工作完成以后,但是无法创建文件
解决办法一
在每次启动容器的时候指定IP、hostname、往/etc/hosts里添加hosts,命令如下:
docker run -itd --name hadoop0 --hostname hadoop0 --net network_my --ip 192.168.10.30 --add-host hadoop1:192.168.10.31 --add-host hadoop2:192.168.10.32 -d -P -p 50070:50070 -p 8088:8088 hadoop:master
解决办法而
hostnamectl set-hostname localhost
vi sbin/vi start-dfs.sh vi stop-dfs.sh
vi start-yarn.sh vi stop-yarn.sh
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_DATANODE_SECURE_USER=yarn
搭建命令
docker run -tdi -P --privileged=true --name hadoopweifb registry.cn-hangzhou.aliyuncs.com/mkmk/centos:bendimianmi init
修改主要配置文件
cd /cloudcomput/hadoop-3.2.1/etc/hadoop
/cloudcomput/hadoop-3.2.1/etc/hadoop/core-site.xml
/cloudcomput/hadoop-3.2.1/etc/hadoop/mapred-site.xml
/cloudcomput/hadoop-3.2.1/etc/hadoop/hdfs-site.xml
/cloudcomput/hadoop-3.2.1/etc/hadoop/yarn-site.xml
将本地hadoop cp到容器
docker cp C:/Users/73444/Desktop/linuxInstallationPackage/hadoop-3.2.1.tar.gz hadoopweifb:/cloudcomput/hadoop-3.2.1.tar.gz
cd /cloudcomput
tar -zxvf hadoop-3.2.1.tar.gz
修改
vim hadoop-env.sh
38行左右
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.el7_7.x86_64
配置hadoop环境变量
vi /etc/profile
export HADOOP_HOME=/cloudcomput/hadoop-3.2.1
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
保存后生效配置
source /etc/profile
修改执行权限
在Hadoop安装目录下找到sbin文件夹
cd /cloudcomput/hadoop-3.2.1/sbin
1、对于start-dfs.sh和stop-dfs.sh文件,添加下列参数:
vi /cloudcomput/hadoop-3.2.1/sbin/start-dfs.sh
vi /cloudcomput/hadoop-3.2.1/sbin/stop-dfs.sh
#!/usr/bin/env bash
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
2、对于start-yarn.sh和stop-yarn.sh文件,添加下列参数:
vi /cloudcomput/hadoop-3.2.1/sbin/start-yarn.sh
vi /cloudcomput/hadoop-3.2.1/sbin/stop-yarn.sh
#!/usr/bin/env bash
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
重新开始start…就可以。
格式化namenode:
hadoop namenode -format
第一次配置需要初始化
启动hadoop:
hadoop start-all.sh