大数据相关操作
大数据相关操作
一、环境配置
1、修改主机名
#修改主机名
hostnamectl set-hostname master
2、固定IP地址
# 进入修改
sudo vim /etc/netplan/01-network-manager-all.yaml# 修改配置文件
# Let NetworkManager manage all devices on this system
network:version: 2renderer: NetworkManagerethernets:ens33:dhcp4: falseaddresses: [192.168.88.101/24]optional: trueroutes:- to: defaultvia: 192.168.88.2nameservers:addresses: [192.168.88.2]# 测试配置内容是否正确
sudo netplan apply try# 重启网络服务
sudo systemctl restart NetworkManager.service
3、修改主机名映射
# 进入修改文件
sudo vim /etc/hosts# 修改配置内容
192.168.88.101 master
192.168.88.102 node1
192.168.88.103 node2
192.168.88.104 node3
4、配置SSH免密登录
# 下载ssh
sudo apt install openssh-server# 生成ssh密钥
ssh-keygen -t rsa# 授权免密登录
ssh-copy-id master
ssh-copy-id node1
ssh-copy-id node2
ssh-copy-id node3
5、关闭防火墙
# 不用管
6、时区同步
# 同步时区
sudo timedatectl set-timezone Asia/Shanghai
# 查看是否同步成功
timedatectl
7、配置Java环境
# 安装JDK
sudo apt install openjdk-8-jdk# 进入配置文件
sudo vim ~/.bashrc# 修改配置文件
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64# 使配置文件生效
source ~/.bashrc# 查看是否配置成功
echo $JAVA_HOME
二、Hadoop安装搭建
1、下载hadoop
下载网址:Apache Download Mirrors
2、解压hadoop
# 解压
sudo tar -zxf hadoop-3.4.0.tar.gz -C /usr/local# 修改文件名字
cd /usr/local
sudo mv hadoop-3.4.0 hadoop# 查看hadoop是否可用
cd /usr/local/hadoop
./bin/hadoop version#修改hadoop的文件权限
sudo chown -R hxy /usr/local/hadoop
3、修改hadoop环境变量
# 进入配置文件
sudo vim ~/.bashrc# 修改配置文件
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin# 使配置文件生效
source ~/.bashrc# 查看是否配置成功
hadoop version
4、HDFS配置
#进入hadoop-env.sh配置文件
sudo vim /usr/local/hadoop/etc/hadoop/hadoop-env.sh# 修改hadoop-env.sh配置文件内容
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64# 进入core-site.xml配置文件
sudo vim /usr/local/hadoop/etc/hadoop/core-site.xml# 修改core-site.xml配置文件内容
<property><name>hadoop.tmp.dir</name><value>file:/usr/local/hadoop/tmp</value><description>Abase for other temporary directories.</description>
</property>
<property><name>fs.defaultFS</name><value>hdfs://master:9000</value>
</property># 进入hdfs-site.xml配置文件
sudo vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml# 修改hdfs-site.xml配置文件内容
<property><name>dfs.replication</name><value>3</value>
</property>
<property><name>dfs.namenode.name.dir</name><value>file:/usr/local/hadoop/dfs/name</value>
</property>
<property><name>dfs.datanode.data.dir</name><value>file:/usr/local/hadoop/dfs/data</value>
</property>
<property><name>dfs.namenode.secondary.http-address</name><value>master:50090</value>
</property>
5、MapReduce配置
# 进入mapred-env.sh文件
sudo vim /usr/local/hadoop/etc/hadoop/mapred-env.sh# 修改mapred-env.sh配置文件
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export HADOOP_JOB_HISTORYSERVER_HEAPSIZE=1000
export HADOOP_MAPRED_ROOT_LOGGER=INFO,RFA# 进入mapred-site.xml文件
sudo vim /usr/local/hadoop/etc/hadoop/mapred-site.xml# 修改mapred-site.xml配置文件
<property><name>mapreduce.framework.name</name><value>yarn</value><discription>MapReduce的运行框架运行为YARN</discription>
</property>
<property><name>mapreduce.jobhistory.address</name><value>master:10020</value><discription>历史服务器通讯端口为master:10020</discription>
</property>
<property><name>mapreduce.jobhistory.webapp.address</name><value>master:19888</value><discription>历史服务器端口为master的19888</discription>
</property>
<property><name>yarn.app.mapreduce.am.env</name><value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
</property>
<property><name>mapreduce.map.env</name><value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
</property>
<property><name>mapreduce.reduce.env</name><value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
</property>
6、YARN配置
# 进入yarn.sh配置文件
sudo vim /usr/local/hadoop/etc/hadoop/yarn-env.sh# 修改yarn.sh配置文件
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_LOG_DIR=$HADOOP_HOME/logs# 进入yarn-site.xml配置文件
sudo vim /usr/local/hadoop/etc/hadoop/yarn-site.xml# 修改yarn-site.xml配置文件
<property><name>yarn.resourcemanager.hostname</name><value>master</value><discription>ResourceManager设置在master节点</discription>
</property>
<property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value><discription>为MapReduce程序开启Shuffle服务</discription>
</property>
7、修改workers
# 修改workers
sudo vim /usr/local/hadoop/etc/hadoop/workers
# 写入配置文件
删除localhost
# 写入子节点主机名
master
node1
node2
node3
8、master操作
# 将配置文件复制到其他节点
sudo scp -r /usr/local/hadoop hxy@node1:~/
sudo scp -r /usr/local/hadoop hxy@node2:~/
sudo scp -r /usr/local/hadoop hxy@node3:~/
sudo scp ~/.bashrc hxy@node1:~/
sudo scp ~/.bashrc hxy@node2:~/
sudo scp ~/.bashrc hxy@node3:~/
9、子节点服务器操作
# 将目录移动到/usr/local
sudo mv ~/hadoop /usr/local
# 修改权限
sudo chown -R hxy:hxy /usr/local/hadoop
# 使配置文件生效
source ~/.bashrc
10、集群格式化
# 格式化HDFS
hdfs namenode -format
11、运行Hadoop
# 开启hdfs进程
start-dfs.sh# 开启yarn进程
start-yarn.sh# 查看进程信息
jps# 关闭进程
stop-dfs.sh# 关闭yarn进程
stop-yarn.sh# 启动历史服务器
mapred --daemon start historyserver# 关闭历史服务器
mapred --daemon stop historyserver
重新格式化
# 删掉文件
cd /usr/local/hadoop
rm -r dfs/ logs/ tmp/# 关掉进程
stop-dfs.sh
stop-yarn.sh# 格式化
hdfs namenode -format
三、HDFS(分布式文件系统)
1、创建目录
hadoop fs -mkdir -p /24303016/hxy
2、查看目录
hadoop fs -ls -lh /
3、上传文件
hadoop fs -put -fp linux文件 /目标目录
4、下载文件
hadoop fs -get /hdfs文件 linux目录
5、查看文件
hadoop fs -cat /douban.csv
hadoop fs -cat /douban.csv |more # 分页查看
6、复制文件
hadoop fs -cp /douabn.csv /douban2.csv
7、追加数据到HDFS文件
hadoop fs -appendToFile 本地文件内容 HDFS文件
8、移动文件
hadoop fs -mv /移动文件或目录 /目标目录
9、删除文件
hadoop fs -rm -r /删除的目标文件或目录
10、查看文件概况
hdfs fsck /243030316/hxy/douban.csv -files -blocks -locations
词频统计
hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.4.0.jar wordcount hdfs://master:9000/input/ hdfs://master:9000/output/wc
四、Hive安装搭建
1、Mysql环境搭建
# 安装Mysql
sudo apt install mysql-server
sudo apt install mysql-client
sudo apt install libmysqlclient-dev# 修改Myql密码
sudo mysql -uroot -p
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';# 设置远程登录密码
CREATE USER 'root'@'%' IDENTIFIED BY '123456';
ALTER USER 'root'@'%' IDENTIFIED BY '123456';# 授予权限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;# 刷新权限
FLUSH PRIVILEGES;# 修改配置文件
vim /etc/mysql/mysql.conf.d/mysqld.cnf
# 将bind-address=127.0.0.1注释# 重启Mysql服务
sudo service mysql restart
2、下载Hive
Hive下载网址:https://hive.apache.org/general/downloads/
Mysql驱动下载:https://downloads.mysql.com/archives/c-j/
3、解压安装Hive
# 解压
sudo tar -zxf apache-hive-4.0.1-bin.tar.gz -C /usr/local# 修改文件名字
cd /usr/local
sudo mv apache-hive-4.0.1-bin hive# 修改文件权限
sudo chown -R hxy /usr/local/hive
4、修改Hive环境变量
# 进入配置文件
sudo vim ~/.bashrc# 修改配置文件
export HIVE_HOME=/usr/local/hive
export PATH=$PATH:$HIVE_HOME/bin# 使配置文件生效
source ~/.bashrc# 查看是否配置成功
hive version
5、Mysql驱动配置
# 将驱动移动到hive的lib目录下
mv mysql-connector-j-8.0.33.jar /usr/local/hive/lib/
6、Hive配置
# 进入core-site.xml配置文件
sudo vim /usr/local/hadoop/etc/hadoop/core-site.xml# 修改core-site.xml文件配置
<property><name>hadoop.proxyuser.hxy.groups</name><value>*</value>
</property>
<property><name>hadoop.proxyuser.hxy.hosts</name><value>*</value>
</property># 创建hive-env.sh文件
cd /usr/local/hive/conf
mv hive-env.sh.template hive-env.sh# 进入hive-env.sh文件
vim hive-env.sh# 修改hive-env.sh文件配置
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export HIVE_HOME=/usr/local/hive
export HADOOP_HOME=/usr/local/hadoop# 创建hive-site.xml文件
cd /usr/local/hive/conf
mv hive-default.xml.template ./hive-site.xml# 进入hive-site.xml文件
vim ./hive-site.xml# 修改hive-site.xml文件配置
<property><name>hive.metastore.warehouse.dir</name><value>/user/hive/warehouse</value>
</property>
<property><name>javax.jdo.option.ConnectionURL</name><value>jdbc:mysql://master:3306/hive?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=UTF-8&</value>
</property>
<property><name>javax.jdo.option.ConnectionDriverName</name><value>com.mysql.jdbc.Driver</value>
</property>
<property><name>javax.jdo.option.ConnectionUserName</name><value>root</value>
</property>
<property><name>javax.jdo.option.ConnectionPassword</name><value>123456</value>
</property># 修改hive-site.xml文件配置
# 将包含system:java.io.tmpdir的配置项的值全部替换位/usr/local/hive/tmp 一共有4处
7、启动Hive
# 初始化Hive
schematool -dbType mysql -initSchema# 创建Hive日志文件
mkdir /usr/local/hive/logs
touch metastore.log
touch hiveserver2.log# 后台启动元数据管理服务
cd /usr/local/hive
nohup bin/hive --service metastore >> logs/metastore.log 2>&1 &# 启动远程服务
nohup bin/hive --service hiveserver2 >> logs/hiveserver2.log 2>&1 &# 连接Hive
beeline -u jdbc:hive2://master:10000 -n hxy
五、Hive
1、创建数据库
create database test;
2、显示数据库信息
desc database test;
3、使用数据库
use test;
4、删除数据库
drop database test cascade;
5、显示表
show tables;
6、删除表
drop table test;
7、查看表类型
desc formatted test;
8、创建内部表
内部表数据存储位置是由hive.metastore.warehouse决定的,删除内部表会直接删除元数据和存储数据。
create table students(id int,name string, age int,sex string);
9、创建外部表
外部表数据可以在任何位置,通过location关键字指定。删除外部表只会删除元数据,不会删除数据本身。
create external table douban(author string,level string,publish_date string,info string)row format delimited fields terminated by ',' location '/tmp/douban';
10、内部表和外部表互相转换
# 内部表转成外部表
alter table test set tblproperties('EXTERNAL_TABLE'='TRUE');# 外部表转成内部表
alter table test set tblproperties('EXTERNAL_TABLE'='FALSE');
11、数据导入
如果数据在linux本地中,需要加关键字local,如果在HDFS中,则不需要。
load data local inpath '/home/hxy/douban.csv' into table douban;
将表的数据查询出来插入到另一个表。其中into表示追加,overwrite表示覆盖。
insert into table douban2 select * from douban;
12、数据导出
将数据导出到本地linux需要将local关键字,导出到HDFS不需要。
# 使用默认列的分隔符
insert overwrite local directory '/home/hxy/douban' select * from douban;# 指定列的分隔符
insert overwrite local directory '/home/hxy/douban' row format delimited fields terminated by ',' select * from douban;
13、创建分区表
分区就是将表拆分到不同的文件夹进行存储,可以极大的提高某些特定场景下Hive的操作性能
# 创建单分区表
create table score(id int, name string,math int,english int)partitioned by(month string)row format delimited fields terminated by '\t';# 创建多分区表
create table score2(id int, name string,math int,english int)partitioned by(year string,month string)row format delimited fields terminated by '\t';
14、分区表数据导入
load data local inpath '/home/hxy/score.txt' into table score2 partition(year='2024',month='10');
15、创建分桶表
分桶就是将表拆分到固定数量的不同文件进行存储,可以减少被操作的数据量,从而提高性能。如(分组,过滤等)
分桶的原理:使用Hash取模运算,确认当前数据去哪一个桶
# 开启分桶的自动优化
set hive.enforce.bucketing=true;# 创建分桶表
create table score3(id int,name string,math int,english int) clustered by(id) into 3 buckets row format delimited fields terminated by '\t';
16、分桶表数据导入
insert overwrite table score3 select * from score2 cluster by(id);
17、表重命名
alter table old_name rename to new_name;
18、添加表分区
alter table score partition (year='2019',month='01',day='10');
19、修改分区值
alter table score partition (year='2019',month='01',day='10') rename to partition (year='2024',month='05',day='18');
20、删除分区
删除分区只是删除元数据中的值,但是HDFS中的分区文件还会存在
alter table score drop partition((year='2019',month='01',day='10');
21、添加新列
alter table score add columns(chinese int,history int);
22、修改列名
只能修改列名,不能修改类型
alter table score change oldname newname int;
23、清空表数据
truncate table course;
24、array数组类型
collection items terminated by指定数组用什么做分隔符
# 创建habby为数组类型
create table test(name string,habby array<string>)row format delimited fields terminated by '\t' collection items terminated by ',';# 统计array类型的元素个数
select name,size(habby) from test;
25、map映射类型
map keys terminated 指定key和value之间用什么做分隔符
# 创建members为映射类型
create table test(name string,members map<string,string>)row format delimited fields terminated by '\t' collection items terminated by '#' map keys terminated ':';# 查询具体的值
select name,members['mom'] from test;# 取出map全部的key
select map_keys(members) from test;# 取出map全部的value
select map_values(members) from test;
26、struct结构类型
struct是一个复合类型,可以在一个列中存入多个子列,每个子列允许设置类型和名称
collection items terminated by 表明struct之间用什么分隔。
# 创建info为结构类型
create table test(name string,members struct<name:string,age:int>)row format delimited fields terminated by '\t' collection items terminated by ':';# 查询struct的子列
select name,ino.age from test;
27、基础查询
# 查询全表数据
select * from test;# 查询表有多少数据
select count(*) from test;# 条件查询
select * from score where name='黄小耶'# 模糊查询
select * from score where name like '黄%'# 排序
select * from score order by id desc;#分组聚合
select sum(english) from score group by name;# 子查询
select avg(english) as avg_english from score group by name having avg_english<80;
28、联合查询
union用于将多个select语句的结果组合成单个结果集,每个select语句返回列的数量和名称必须相同。
union默认做去重操作,加上all代表不去重。
# 默认去重
select id,name from score union select id,name from score;# 不去重
select id,name from score union all select id,name from score;
29、随机抽样
# 分桶抽样:基于行从3个桶随机抽一份
select * from score2 tablesample(bucket 1 out of 3 on rand());# 分桶抽样:基于列从3个桶随机抽一份
select * from score2 tablesample(bucket 1 out of 3 on year);# 数据块抽样:按条数抽数据,由前向后抽取数据
select * from score2 tablesample(60 rows);# 数据块抽样:按百分比抽取数据,由前向后抽取数据
select * from score2 tablesample(10 percent);# 数据块抽样:按数据大小(K、M、G,表示KB、MB、GB)抽取数据,由前向后抽取数据
select * from score2 tablesample(3K);
30、虚拟列
# input__file__name显示数据行所在的具体文件
select id,name,input__file__name from score;# block__offset__inside__file显示数据行所在的文件的偏移量
select id,name,block__offset__inside__file from score;
六、HBase安装搭建
1、下载Hbase
HBase下载网址:https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/2.4.18/
2、解压安装HBase
# 解压HBase
sudo tar -zxvf hbase-2.4.18-bin.tar.gz -C /usr/local# 重命名
sudo mv /usr/local/hbase-2.4.18 /usr/local/hbase# 修改文件权限
sudo chown -R hxy /usr/local/hbase
3、配置Hbase环境变量
# 进入环境变量文件
sudo vim ~/.bashrc#配置内容
export HBASE_HOME=/usr/local/hbase
export PATH=$PATH:$HBASE_HOME/bin# 使配置文件生效
source ~/.bashrc# 查看是否配置成功
hbase version
4、Hbase配置
# 进入hbase-env.sh文件
sudo vim /usr/local/hbase/conf/hbase-env.sh# 写入配置内容
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export HBASE_CLASSPATH=/usr/local/hadoop/etc/hadoop
export HBASE_MANAGES_ZK=true# 进入hbase-site.xml文件
sudo vim /usr/local/hbase/conf/hbase-site.xml# 写入配置内容
<property><name>hbase.rootdir</name><value>hdfs://master:9000/hbase</value>
</property>
<property><name>hbase.cluster.distributed</name><value>true</value>
</property>
<property><name>hbase.zookeeper.quorum</name><value>node1,node2,node3</value>
</property>
<property><name>hbase.unsafe.stream.capability.enforce</name><value>false</value>
</property># 进入regionservers文件
sudo vim /usr/local/hbase/conf/regionservers删除localhost
# 添加如下内容
node1
node2
node3
5、复制文件到节点服务器
# 复制hbase文件
sudo scp -r /usr/local/hbase hxy@node1:~/
sudo scp -r /usr/local/hbase hxy@node2:~/
sudo scp -r /usr/local/hbase hxy@node3:~/
6、子节点操作
# 移动文件
sudo mv ~/hbase /usr/local#修改权限
sudo chown -R hxy:hxy /usr/local/hbase
7、启动Hbase
start-hbase.sh
8、打开Hbase
hbase shell
ocal/hbase/conf/hbase-site.xml
写入配置内容
hbase.rootdir hdfs://master:9000/hbase hbase.cluster.distributed true hbase.zookeeper.quorum node1,node2,node3 hbase.unsafe.stream.capability.enforce false进入regionservers文件
sudo vim /usr/local/hbase/conf/regionservers
删除localhost
添加如下内容
node1
node2
node3
#### 5、复制文件到节点服务器```shell
# 复制hbase文件
sudo scp -r /usr/local/hbase hxy@node1:~/
sudo scp -r /usr/local/hbase hxy@node2:~/
sudo scp -r /usr/local/hbase hxy@node3:~/
6、子节点操作
# 移动文件
sudo mv ~/hbase /usr/local#修改权限
sudo chown -R hxy:hxy /usr/local/hbase
7、启动Hbase
start-hbase.sh
8、打开Hbase
hbase shell