1.大数据三件事情:
1.数据采集:flume、logstash、sqoop、datax、maxwell、cannel、flinkcdc、(自己开发spark、flink)
2.数据存储:hadoop、hbase、kudu、clickhouse、mysql、tidb、solar
3.数据分析:mapreduce(hadoop)、hive、spark、flink、phoenix、clickhouse、kylin、presto、druid、impala
数据传输: kafka、pular
2.数据处理的方式:
1.离线计算、批处理 :
根据业务周期性来定:
eg:
T+1 :
H+1: 当前时间点 处理上一个小时【整点】之前的数据
2.实时计算、实时处理:
业务周期性:
1.指标:1s、3s、5s、10s
2.数仓:
1min、5min、10min、30min
hadoop:分布式文件存储系统
广义:hadoop为主的生态圈(sqoophive、spark、flink、cdh)
狭义:hadoop本身
hadoop组成:
hdfs 数据存储 hbase、kudu、
yarn 资源(cpu、mem)和作业的调度 就剩yarn 【任务调度框架 有区别的】
mapreudce 数据计算的框架【生产上不用】 设计理念指导其他框架 (hive、spark、flink)
hadoop版本:
1.apache :【公司自己搭建比较少、云服务器】
2.x
3.x
2.cdh 【偏多、部署和管理方便 】
cdh5.x cdh6.x
3.hdp
该项目包括以下模块:
Hadoop Common:支持其他Hadoop模块的通用实用程序。
Hadoop 分布式文件系统 (HDFS™):一种分布式文件系统,提供对应用程序数据的高吞吐量访问。
Hadoop YARN:用于作业调度和集群资源管理的框架。
Hadoop MapReduce:一种基于YARN的系统,用于并行处理大型数据集。
谁使用Hadoop?
学习:
apache (主要)
cdh (体验)
部署:
都要
伪分布式【单点】
完全分布式【三台】【不配ha】
部署什么东西?【大部分软件都是 主从架构】
1.数据存储:hdfs
namenode 老大
datanode 小弟
seconderynamenode 秘书
2.资源分配和任务调度: yarn
resourcemanager 老大
nodemanager 小弟
伪分布式【单点】:
1.配置模板机:
1.hostname =》 ip
192.168.10.20 bigdata20
192.168.10.21 bigdata21
192.168.10.22 bigdata22
192.168.10.23 bigdata23
192.168.10.24 bigdata24
192.168.10.25 bigdata25
2.关闭防火墙 1-65535
systemctl stop firewalld
systemctl disable firewalld
3.hadoop 配置临时root权限
vim /etc/sudoers
4.hadoop用户创建工作环境
mkdir app data software
5.卸载系统自带的jdk
rpm -qa | grep java | xargs -n1 rpm -e --nodeps
6.重启机器
reboot
克隆机器:
1.修改ip
2.机器的名字
远程连接:
1.hostname =》 ip
win => hosts 配置了ip映射 【注意】
linux =》 hosts
ip =》 hostname 一一映射
win :C:\Windows\System32\drivers\etc
官网:
hadoop.apache.org
project.apache.org
源码地址:
https://github.com/apache/hadoop
https://github.com/apache/project
智慧教学云平台:https://online.zretc.net
1.Java™ must be installed.
1.部署jdk
1.解压
tar -zxvf ./jdk-8u212-linux-x64.tar.gz -C ~/app/
2.软连接
ln -s jdk1.8.0_212/ java
好处:
1.方便版本管理
2.磁盘不够 小盘换大盘
3.配置环境变量
vim ~/.bashrc
#JAVA_HOME
export JAVA_HOME=/home/hadoop/app/java
export PATH=${JAVA_HOME}/bin:${PATH}
4.生效环境变量
source ~/.bashrc
5.介绍目录
drwxr-xr-x. 2 hadoop hadoop 4096 4月 2 2019 bin 执行脚本
drwxr-xr-x. 3 hadoop hadoop 4096 4月 2 2019 include lib库
drwxr-xr-x. 5 hadoop hadoop 4096 4月 2 2019 lib lib库
ssh must be installed :
部署hadoop:
1.下载安装包
1.官网 3.3.2
2.http://archive.apache.org/dist https://dlcdn.apache.org/hadoop/common/
2.安装
1.解压
tar -zxvf ./hadoop-3.1.3.tar.gz -C ~/app/
tar -zxvf ./hadoop-3.3.2.tar.gz -C ~/app/
2.软连接
ln -s hadoop-3.3.2/ hadoop
3.目录结构:
drwxr-xr-x. 2 hadoop hadoop 4096 2月 22 04:42 bin 命令执行脚本
drwxr-xr-x. 3 hadoop hadoop 4096 2月 22 02:44 etc 管理配置文件
drwxr-xr-x. 2 hadoop hadoop 4096 2月 22 04:42 include lib库
drwxr-xr-x. 3 hadoop hadoop 4096 2月 22 04:42 lib lib库
drwxr-xr-x. 3 hadoop hadoop 4096 2月 22 02:44 sbin 启动停止脚本
drwxr-xr-x. 4 hadoop hadoop 4096 2月 22 05:52 share 官方提供的案例包
4.配置环境变量
vim ~/.bashrc
#HADOOP_HOME
export HADOOP_HOME=/home/hadoop/app/hadoop
export PATH=${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:${PATH}
5.生效环境变量
source ~/.bashrc
部署服务:hdfs yarn
hdfs:
1.vim hadoop-env.sh
export JAVA_HOME=/home/hadoop/app/java
2.hadoop模式:
Local (Standalone) Mode 本地模式 用不了
Pseudo-Distributed Mode 伪分布式 学习
Fully-Distributed Mode 完全分布式 生产用【ha】
3.配置文件:core-site.xml hdfs-site.xml
core-site.xml:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://bigdata21:9000</value>
</property>
</configuration>
hdfs-site.xml:
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
4.ssh 的配置
ssh 远程登录 、执行
1.语法格式
ssh 机器的ip/hostname =>远程登录
ssh 用户@机器的ip/hostname [命令] =》 远程登录执行
2.面试题:
a b
a=>b 远程登录执行 光标停留在 a机器还是b机器? a
a=>b 远程登录 光标停留在 a机器还是b机器? b
1.ssh免密登录配置
ssh-keygen =》 生成两把钥匙 2把
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys 【记录钥匙】
chmod 0600 ~/.ssh/authorized_keys =》 修改权限
664 =》 600
hdfs启动:
1.格式化文件系统【第一次部署的时候做】
hdfs namenode -format
2.启动hdfs
start-dfs.sh
三个进程:
如何查看进程?
1.ps -ef | grep hadoop
2.jps
[hadoop@bigdata21 ~]$ jps | grep -v Jps
5746 SecondaryNameNode
5426 NameNode
5541 DataNode
3. hadoop daemon log output :
1.$HADOOP_LOG_DIR
2.默认路径:$HADOOP_HOME/logs
4.namenode web ui:
http://ip:9870/
http://hostname:9870/
linux 文件系统
hadoop 文件系统
win 文件系统
百度网盘
端口:
9000 =》 namenode 对外提供服务的端口
9870 =》 namenode web ui 的端口
3306 => mysql对外提供服务的端口
5.执行一个mapreduce job :
hdfs dfs =》 hadoop软件 提供的 shell 命令 新的
hadoop fs 旧的
dfs =》 操作文件系统的程序入口
fs
1.创建文件
hdfs dfs -mkdir /data
hadoop fs -mkdir /data
2.上传文件
hadoop fs -put ./1.log /data
3.运行jar包 =》 mapreduce job
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar grep input output 'dfs[a-z.]+'
hadoop jar =》 yarn jar
1.去看一下hadoop-mapreduce-examples-3.3.2.jar 源码
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /data /wc-out
4.查看job运行结果数据
1.文件下载
hadoop fs -get /wc-out ./
2.直接查看hdfs上文件
hadoop fs -cat /wc-out/*
大数据处理:
1.指定数据源
2.处理
3.结果输出
思考:
mapreudce job cpu mem 是谁分配的呢? yarn ?
local分配的
mapreudce job 运行模式 :
1.local 本地模式
2.yarn yarn模式
xxxx on yarn :
mr
spark
flink
on k8s :
5.停止hdfs 命令
stop-dfs.sh
部署yarn: mapred-site.xml
1.mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.application.classpath</name>
<value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
</property>
</configuration>
2.yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_HOME,PATH,LANG,TZ,HADOOP_MAPRED_HOME</value>
</property>
</configuration>
启动yarn :
1.启动yarn
start-yarn.sh
2.yarn 的web ui :
http://ip:8088/
http://hostname:8088/
3.Run a MapReduce job.
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /data /wc-out4
4.停止yarn
stop-yarn.sh
补充:
1.hadoop脚本:
start-all.sh :
start-dfs.sh
start-yarn.sh
stop-all.sh
2.配置文件 :
1.默认配置文件
core-default.xml
hdfs-default.xml
mapred-default.xml
yarn-default.xml
2.服务器配置文件:
core-site.xml
hdfs-site.xml
mapred-site.xml
yarn-site.xml
参数配置的优先级: 服务器配置 》默认配置
3.参数解释:
fs.defaultFS =》 指定namenode 对外提供服务的 配置 ip+port
dfs.replication => 块的副本数 3
mapreduce.framework.name
4.修改数据文件路径 =》 tmp
namenode
datanode
snn
yarn
hadoop.tmp.dir =》 /tmp/hadoop-${user.name}
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/app-data</value>
</property>
5.配完参数 启动hdfs ?
hdfs :/data => linux: /tmp
1.复制数据
cp -r ./* /home/hadoop/app-data/
2.启动hdfs
完全分布式部署: 三台机器
1.集群划分?
hdfs:
bigdata22 namenode datanode
bigdata23 datanode
bigdata24 snn datanode
yarn:
bigdata22 nodemanager
bigdata23 resourcemanager nodemanager
bigdata24 nodemanager
2.注意:
snn 机器选择参数
resourcemanager 机器选择参数
3.ssh 免密登录的做
4.linux下文件分发
scp :
[hadoop@bigdata21 ~]$ scp hadoop@bigdata21:./1.log hadoop@bigdata22:~
raync
ssh 免密登录
1.ssh-keygen 【三台机器都要做】
2.拷贝公钥 【三台机器都要做】
ssh-copy-id xxx
ssh-copy-id bigdata22
ssh-copy-id bigdata23
ssh-copy-id bigdata24
3.验证 免密登录
1.部署jdk【三台都要部署】
1.先部署一台 =》 分发到其他机器
以bigdata22 为例 部署+分发
1.文件分发脚本
#判断参数的个数
if [ $# -lt 1 ];then
echo "参数不足"
exit;
fi
for host in bigdata22 bigdata23 bigdata24
do
#todo 分发文件
echo "======${host}====="
for file in $@
do
#判断文件是否存在
if [ -e $file ];then
#获取文件父目录
pdir=$(cd -P $(dirname $file); pwd)
#获取文件名字
fname=$(basename $file)
#分发文件
ssh $host "mkdir -p ${pdir}"
rsync -av ${pdir}/${fname} $host:${pdir}
else
echo "${file} 不存在"
fi
done
done
1.分发jdk
xsync jdk1.8.0_212
2.分发软连接
xsync java
3.分发环境变量文件
xsync ~/.bashrc
4.source 环境变量
source ~/.bashrc
2.部署hadoop
配置bigdata22:
1.解压
2.软连接
3.环境变量
4.配置hdfs
1.core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://bigdata22:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/app-data</value>
</property>
</configuration>
2.hdfs-site.xml :
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>bigdata24:9868</value>
</property>
</configuration>
5.配置yarn
mapred-site.xml:
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.application.classpath</name>
<value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
</property>
yarn-site.xml:
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_HOME,PATH,LANG,TZ,HADOOP_MAPRED_HOME</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>bigdata23</value>
</property>
hadoop-env.sh \mapred-env.sh\yarn-env.sh
export JAVA_HOME=/home/hadoop/app/java
[hadoop@bigdata22 hadoop]$ cat workers
bigdata22
bigdata23
bigdata24
5.分发文件
22 =》 23 24
1.hadoop文件夹
2.软连接
3.环境变量
6.启动 hdfs
1.格式化
hdfs namenode -format
2.启动hdfs
start-dfs.sh
3.查看webui
http://ip:9870/
7.启动yarn
1.启动yarn
start-yarn.sh
8.
stop-all.sh => rm 有问题的
start-all.sh
9.集群启动的脚本
if [ $# -lt 1 ];then
echo "参数不足"
echo "Usage $0 start|stop"
exit;
fi
case $1 in
"start")
echo "===启动hadoop集群==="
echo "===启动hdfs==="
ssh bigdata22 "/home/hadoop/app/hadoop/sbin/start-dfs.sh"
echo "===启动yarn==="
ssh bigdata23 "/home/hadoop/app/hadoop/sbin/start-yarn.sh"
;;
"stop")
echo "===关闭hadoop集群==="
echo "===关闭yarn==="
ssh bigdata23 "/home/hadoop/app/hadoop/sbin/stop-yarn.sh"
echo "===关闭hdfs==="
ssh bigdata22 "/home/hadoop/app/hadoop/sbin/stop-dfs.sh"
;;
*)
echo "无效的参数"
echo "Usage $0 start|stop"
;;
esac
10.java进程查看脚本
for host in bigdata22 bigdata23 bigdata24
do
echo "====$host===="
ssh $host "/home/hadoop/app/java/bin/jps | grep -v Jps"
done
hdfs api :
1.java
2.hdfs 命令
hdfs 命令:
hdfs dfs
hadoop fs
1.创建文件夹
hadoop fs -mkdir xx
2.上传
hadoop fs -put xx xxx
3.下载
hadoop fs -get xxx xx
4. cat 查看文件内容
URI =>
local : file:///
hdfs : hdfs://
5.mv 与cp
6.ls
7.查看文件大小
ls -h
du
8.删除
9.查看文件
cat
text
10.修改文件权限
chmod
chown
count
test => ****
[hadoop@bigdata22 data]$ hadoop fs -mv /1.log /2.log
[hadoop@bigdata22 data]$ hadoop fs -cp /2.log /1.log
[hadoop@bigdata22 data]$ hadoop fs -mkdir /data
[hadoop@bigdata22 data]$ hadoop fs -cp /2.log /data/3.log