暑假周总结2
暑假第二周,本周主要是完成数据结构小学期的大作业和数据库小学期的大作业,并且配置好上次下载的hadoop
数据结构的大作业我选择了教师信息管理系统,这个课题基本不涉及算法,而且数据库增删改查对我来说已经没有任何难度了,很快就完成了
数据库的大作业虽然十天后才验收但我也是三天就完成了,也是web的增删改查,跟上学期的javaweb没两样
主要工作是配置hadoop
配置 hadoop 环境变量
在 /etc/profile 文件的尾部添加以下内容:
#HADOOP
export HADOOP_HOME=/hadoop/hadoop-2.7.7
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
使配置文件生效
source /etc/profile
测试是否安装成功
hadoop version
本地运行模式
在 hadoop-2.7.7 文件下面创建一个 input 文件夹
mkdir input
将 Hadoop 的 xml 配置文件复制到 input
cp etc/hadoop/*.xml input
在 hadoop-2.7.7 目录下,执行 share 目录下的 MapReduce 程序
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar grep input/ output 'dfs[a-z.]+'
伪分布式运行模式
3.2.1 启动 HDFS 并运行 MapReduce 程序
配置集群,修改 Hadoop 的配置文件(/hadoop/hadoop-2.7.7/etc/hadoop 目录下)
core-site.xml
<configuration>
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://lyh:9000</value>
</property>
<!-- 指定Hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/hadoop/hadoop-2.7.7/data/tmp</value>
</property>
</configuration>
hadoop-env.sh
修改 JAVA_HOME 路径:
# The java implementation to use.
export JAVA_HOME=/usr/local/java/jdk1.8.0_151
hdfs-site.xml
<configuration>
<!-- 指定HDFS副本的数量 -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
启动集群
格式化 NameNode(第一次启动时格式化,以后就不要总格式化)
hdfs namenode -format
启动 NameNode
hadoop-daemon.sh start namenode
启动 DataNode
hadoop-daemon.sh start datanode
查看集群
查看是否启动成功
操作集群
在 HDFS 文件系统上创建一个 input 文件夹
hdfs dfs -mkdir -p /user/lyh/input
将测试文件内容上传到文件系统上
hdfs dfs -put wcinput/wc.input /user/lyh/input/
在 hadoop-2.7.7 目录下,运行 MapReduce 程序
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount /user/lyh/input/ /user/lyh/output
查看输出结果
命令行查看:
hdfs dfs -cat /user/atguigu/output/*
完全分布式运行模式
3.3.1 虚拟机准备
准备(克隆) 3 台客户机
主机名称 IP 地址
master 192.168.217.130
slave1 192.168.217.131
slave2 192.168.217.132
每台机器分别修改 /etc/hosts 文件,将每个机器的 hostname 和 ip 对应
vim /etc/hosts
192.168.217.130 master
192.168.217.131 slave1
192.168.217.132 slave2
之后详细操作查看 2.1
3.3.2 编写集群分发脚本 xsync
scp(secure copy)安全拷贝
① scp 定义:
scp 可以实现服务器与服务器之间的数据拷贝。
② 基本语法:
scp -r 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称
1
rsync(remote synchronize)远程同步工具
① rsync 定义:
rsync 主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
rsync 和 scp 区别:用 rsync 做文件的复制要比 scp 的速度快,rsync 只对差异文件做更新。scp 是把所有文件都复制过去。
② 基本语法:
rsync -rvl 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称
说明:-v:显示复制过程 、-l:拷贝符号链接
xsync 集群分发脚本
需求:循环复制文件到所有节点的相同目录下
① 在 /usr/local/bin 目录下创建 xsync 文件
vim xsync
在文件中输入以下内容:
#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if((pcount==0)); then
echo no args;
exit;
fi
#2 获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$fname
#3 获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir
#4 获取当前用户名称
user=`whoami`
#5 循环
for i in master slave1 slave2
do
echo "****************** $i *********************"
rsync -rvl $pdir/$fname $user@$i:$pdir
done
② 修改脚本 xsync 具有执行权限
chmod 777 xsync
③ 调用脚本形式:xsync 文件名称
3.3.3 集群配置
集群部署规划
master slave1 slave2
HDFS NameNode
DataNode DataNode SecondaryNameNode
DataNode
YARN NodeManager ResourceManager
NodeManager NodeManager
配置集群
⑴ 配置核心文件
配置 core-site.xml
<configuration>
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<!-- 指定Hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/hadoop/hadoop-2.7.7/data/tmp</value>
</property>
</configuration>
⑵ HDFS 配置文件
① 配置 hadoop-env.sh
修改 JAVA_HOME 路径:
# The java implementation to use.
export JAVA_HOME=/usr/local/java/jdk1.8.0_151
② 配置 hdfs-site.xml
<configuration>
<!-- 指定HDFS副本的数量 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- 指定Hadoop辅助名称节点主机配置 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>slave2:50090</value>
</property>
</configuration>
⑶ YARN 配置文件
① 配置 yarn-env.sh
修改 JAVA_HOME 路径:
export JAVA_HOME=/usr/local/java/jdk1.8.0_151
② 配置 yarn-site.xml
<configuration>
<!-- Reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>slave1</value>
</property>
<!-- 日志聚集功能使能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 日志保留时间设置7天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
</configuration>
⑷ MapReduce 配置文件
① 配置 mapred-env.sh
修改 JAVA_HOME 路径:
export JAVA_HOME=/usr/local/java/jdk1.8.0_151
② 配置 mapred-site.xml
<configuration>
<!-- 指定MR运行在YARN上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<!-- 历史服务器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
</configuration>
在集群上分发配置好的 Hadoop 目录
xsync /hadoop/
3.3.4 集群单点启动
如果集群是第一次启动,需要格式化 NameNode
hadoop namenode -format
在 master上启动 NameNode
hadoop-daemon.sh start namenode
在 master、slave1 和 slave2 上分别启动 DataNode
hadoop-daemon.sh start datanode