基于docker搭建Hadoop 3.3 hive3.1.2 Mysql 8.0.24 环境

致读者: 博主是一名数据科学与大数据专业大三的学生,一个互联网新人,写博客一方面是为了记录自己的学习过程中遇到的问题和思考,一方面是希望能够帮助到很多和自己一样处于困惑的读者。
由于水平有限,博客中难免会有一些错误,有纰漏之处恳请各位大佬不吝赐教!之后会写大数据专业的文章哦。
GitHub链接https://github.com/wfy-belief
尽管现在我的水平可能还不太及格,但我会尽我自己所能,做到最好☺
——天地有正气,杂然赋流形。下则为河岳,上则为日星。


需求: 因为最近准备学习hive,但是仅仅为了hive使用VM搭建一个集群,感觉挺难受的,于是想到了使用docker搭建一下环境Hive环境,并进行记录。

docker镜像拉取和使用

镜像地址

最新版 增加自启动 和 DBeaver 连接

操作地址

本地 hive 版本

数据库root账号密码root

hive用户账号密码 hive

仅配置 hive-site.xml

可自定义

注:由于 jdk11 位置 bug,改用jdk8

其它皆是自定义

docker pull wfybelief/centos:hive

docker run -itd -p 50022:22 -p 9870:9870 -p 8088:8088 -p 3306:3306 --privileged --name centos-hadoop-hive wfybelief/centos:hive /usr/sbin/init

hadoop-mysql 版本

增加 mysql 默认端口 3306

自启动服务

docker pull wfybelief/centos:hadoop-mysql

docker run -itd -p 50022:22 -p 9870:9870 -p 8088:8088 -p 3306:3306 --privileged --name centos-hadoop-mysql wfybelief/centos:hadoop-mysql /usr/sbin/init

hadoop 版本

可以直接拉取

集群自启动,端口映射自定义。

start-all.sh stop-all.sh 等脚本环境变量以配置

docker pull wfybelief/centos:hadoop

docker run -itd -p 50022:22 -p 9870:9870 -p 8088:8088 --privileged --name centos-hadoop wfybelief/centos:hadoop /usr/sbin/init

ssh版本

可以直接拉取

远程访问 使用

docker pull wfybelief/centos:ssh

docker run -itd -p 50022:22 --privileged --name centos-ssh wfybelief/centos:ssh /usr/sbin/init

端口说明(向下兼容 上面为最新)

集群映射端口(本机 -> 容器)版本备注
hive默认配置
3306:3306hadoop-mysqlMySQL
9870:9870hadoophdfs
8088:8088hadoopyarn
50022:22ssh远程访问

准备 centos7.9 镜像

这里使用的是centos7.9
直接使用 docker pull centos:7.9.2009 拉取镜像即可
在这里插入图片描述

配置ssh远程访问

因为想要使用xshell远程访问。
所以在最初的镜像上面配置一下ssh,制作一个ssh版本的本地镜像
值得一提的是,作者使用的是 windows 环境。不过大致过程都是相同的。

docker run -itd -p 50022:22 --privileged --name centos-ssh centos:7.9.2009 /usr/sbin/init
  • –privileged: 可以使container内的root拥有真正的root权限
  • -d: 后台运行容器,并返回容器ID;
  • -i: 以交互模式运行容器,通常与 -t 同时使用;
  • -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
  • -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
  • –name="centos-ssh": 为容器指定一个名称,如果不写,会自动生成一个名字,如modest_bouman;
  • /usr/sbin/init:因为后面会使用systemctl启动sshd服务,所以添加该项,否则会报错Failed to get D-Bus connection: Operation not permitted,因为覆盖了默认的 /bin/bash,所以不能使用docker attach进入容器了,需要使用以下方式进入。

运行成功截图

在这里插入图片描述

进入容器

docker exec -it centos-ssh bash

运行成功截图
在这里插入图片描述

安装 sshd

// 安装网络工具,可以使用ifconfig查看网卡ip信息
yum -y install net-tools
// 安装ssh服务
yum -y install openssh-server
// 需要的话,安装ssh客户端
yum -y install openssh-clients
// 需要的话,安装passwd,修改root用户密码,这里就不细说了
yum -y install passwd

此处安装 openssh-serverpasswd 即可。
当然安装 net-tools 使用 ifconfig可以查看ip。

安装截图

在这里插入图片描述
需要的话可以使用vi或vim修改sshconfig 【vi /etc/ssh/sshd_config
比如是否允许root登陆,端口号等,默认可以root远程登陆
安装和语言错误解决方法

启动 ssh 服务

systemctl start sshd

设置密码

设置密码的目的是为了远程访问

passwd

使用xshell进行连接

此时应该注意宿主机IP
我用的宿主机IP为 localhost

运行成功截图

在这里插入图片描述
在这里插入图片描述

制作ssh 本地镜像

docker commit -m "create a centos image with ssh" 54593e30ec73 centos:ssh

之后使用一下命令就可以使用 ssh

docker run -itd -p 50022:22 --privileged --name centos-ssh centos:ssh /usr/sbin/init

至此ssh的centos本地镜像制作完成

参考资料


配置Hadoop

  • 端口1 9870 hdfs
  • 端口2 8088 yarn

启动ssh镜像 并配置端口映射

docker run -itd -p 50022:22 -p 9870:9870 -p 8088:8088 --privileged --name centos-hadoop centos:ssh /usr/sbin/init

然后远程访问
在这里插入图片描述

使用xftp传输jdk和Hadoop安装包

在这里插入图片描述
接下来配置jdk和Hadoop环境

Jdk

export JAVA_HOME=/root/softwares/java
export JAVA_BIN=$JAVA_HOME/bin
export JAVA_LIB=$JAVA_HOME/lib
export CLASSPATH=.:$JAVA_LIB/tools.jar:$JAVA_LIB/dt.jar
export PATH=$JAVA_HOME/bin:$PATH

Hadoop

#设置HADOOP_HOME为Hadoop的安装路径/usr/local/hadoop
export HADOOP_HOME=/root/softwares/hadoop
# 设置PATH
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
# 设置HADOOP的其他环境变量
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
# 链接库的相关设置
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH

在这里插入图片描述

配置Hadoop

hadoop-env.sh

export JAVA_HOME=/root/softwares/java

core-site.xml

<property>
    <name>hadoop.tmp.dir</name>
    <value>file:/root/softwares/hadoop/tmp</value>
    <description>Abase for other temporary directories.</description>
</property>
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://localhost:9000</value>
</property>

hdfs-site.xml

<property>
    <name>dfs.replication</name>
    <value>1</value>
</property>
<property>
    <name>dfs.namenode.name.dir</name>
    <value>file:/root/softwares/hadoop/tmp/dfs/name</value>
</property>
<property>
    <name>dfs.datanode.data.dir</name>
    <value>file:/root/softwares/hadoop/tmp/dfs/data</value>
</property>

vim yarn-site.xml

<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>127.0.0.1:8032</value>
</property>
<property>
    <name>yarn.resourcemanager.scheduler.address</name>
    <value>127.0.0.1:8030</value>
</property>
<property>
    <name>yarn.resourcemanager.resource-tracker.address</name>
    <value>127.0.0.1:8031</value>
</property>

mapred-site.xml

cp mapred-site.xml.template mapred-site.xml
vim mapred-site.xml
<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>

Hadoop 版本改动附加

start-dfs.sh

HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

start-yarn.sh

YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

stop-dfs.sh

HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

stop-yarn.sh

YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

格式化与启动

格式化

hadoop namenode -format
# hdfs namenode -format

启动

start-all.sh

报告

hdfs dfsadmin -report

解决localhost.localdomain: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password)

一、情况
在虚拟机搭建Hadoop环境时,出现localhost.localdomain: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password)问题,这个问题是由于即使是本机使用SSH服务也是需要对自己进行公私钥授权的,所以在本机通过ssh-keygen创建好公私钥,然后将公钥复制到公私钥的认证文件中就可以了

ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

docker commit -m "create a centos image with hadoop" ecd223de4c0b centos:hadoop

之后使用一下命令就可以使用 ssh

docker run -itd -p 50022:22 -p 9870:9870 -p 8088:8088 --privileged --name centos-hadoop centos:hadoop /usr/sbin/init

至此Hadoop的centos本地镜像制作完成

附加内容开机自启动

# Hadoop systemd service file
#表示基础信息
[Unit]
#描述
Description=Hadoop Community Server
#在哪个服务之后启动
After=network.target  #服务级别,低于network,也可以理解为network启动后再启动Hadoop
 
#安装相关信息
[Install]
#以哪种方式启动
#multi-user.target表明当系统以多用户方式(默认的运行级别)启动时,这个服务需要被自动运行。
WantedBy=multi-user.target
 
#表示服务信息
[Service]
#以fork方式从父进程创建子进程
Type=forking
User=root
Group=root
#启动服务的命令(路径为实际hadoop的实际安装路径)
ExecStart=/root/softwares/hadoop/sbin/start-all.sh
#重新加载命令
# ExecReload=/root/softwares/hadoop/sbin/stop-all.sh;sleep 10; /root/softwares/hadoop/sbin/start-all.sh
#停止服务的命令
# ExecStop=/root/softwares/hadoop/sbin/stop-all.sh &

把停止服务命令注释,不然有bug,启动服务自动停止
参考资料
参考资料

镜像发布

docker tag 3990b34295e4 wfybelief/centos:hadoop
docker push wfybelief/centos

Mysql

参考资料

打包镜像

docker commit -m "create a centos image with mysql" 59bbe9c4cf58 wfybelief/centos:hadoop-mysql

hive

配置环境变量

#hive
export HIVE_HOME=/root/softwares/hive
export PATH=$PATH:$HIVE_HOME/bin

hive-site.xml文件

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
  <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value>
    <description>JDBC connect string for a JDBC metastore</description>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
    <description>Driver class name for a JDBC metastore</description>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>hive</value>
    <description>username to use against metastore database</description>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>hive</value>
    <description>password to use against metastore database</description>
  </property>
</configuration>

创建数据库和用户

CREATE DATABASE hive;
create user 'hive'@'%' identified by 'hive';
grant all privileges on hive.* to 'hive'@'%';
flush privileges;

初始化数据库

一定要初始化 QAQ !!!

./bin/schematool -dbType mysql -initSchema

错误整理

更多错误

查看hadoop安装目录下share/hadoop/common/lib内guava.jar版本
查看hive安装目录下lib内guava.jar的版本 如果两者不一致,删除版本低的,并拷贝高版本的

智能网联汽车的安全员高级考试涉及多个方面的专业知识,包括但不限于自动驾驶技术原理、车辆传感器融合、网络安全防护以及法律法规等内容。以下是针对该主题的一些核心知识解析: ### 关于智能网联车安全员高级考试的核心内容 #### 1. 自动驾驶分级标准 国际自动机工程师学会(SAE International)定义了六个级别的自动驾驶等级,从L0到L5[^1]。其中,L3及以上级别需要安全员具备更高的应急处理能力。 #### 2. 车辆感知系统的组成与功能 智能网联车通常配备多种传感器,如激光雷达、毫米波雷达、摄像头和超声波传感器等。这些设备协同工作以实现环境感知、障碍物检测等功能[^2]。 #### 3. 数据通信与网络安全 智能网联车依赖V2X(Vehicle-to-Everything)技术进行数据交换,在此过程中需防范潜在的网络攻击风险,例如中间人攻击或恶意软件入侵[^3]。 #### 4. 法律法规要求 不同国家和地区对于无人驾驶测试及运营有着严格的规定,考生应熟悉当地交通法典中有关自动化驾驶部分的具体条款[^4]。 ```python # 示例代码:模拟简单决策逻辑 def decide_action(sensor_data): if sensor_data['obstacle'] and not sensor_data['emergency']: return 'slow_down' elif sensor_data['pedestrian_crossing']: return 'stop_and_yield' else: return 'continue_driving' example_input = {'obstacle': True, 'emergency': False, 'pedestrian_crossing': False} action = decide_action(example_input) print(f"Action to take: {action}") ``` 需要注意的是,“同学”作为特定平台上的学习资源名称,并不提供官方认证的标准答案集;建议通过正规渠道获取教材并参加培训课程来准备此类资格认证考试
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZZULI_星.夜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值