如果选择最小安装,会没有ifconfig和vim,需要安装
# ifconfig
yum provides ifconfig
yum install net-tools
# vim
yum -y install vim*
# wget
yum -y install wget
#
yum -y install expect
查看防火墙的状态:
systemctl status firewalld.service
关闭防火墙:
systemctl stop firewalld.service
设置防火墙开机不自启:
systemctl disable firewalld.service
1.2 修改配置文件
vim /etc/sysconfig/network-scripts/ifcfg-ens33
在文件中添加以下内容:
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.6.135
#IPADDR=IP地址
PR/et/EFIX=24
GATEWAY=192.168.6.2
DNS1=192.168.6.2
DNS2=8.8.8.8
stouch intellij-idea.desktop
1.3 重启网络
重启网络命令:
systemctl restart NetworkManager
重启网络
service network restart
#出现绿色ok就可以
#测试 ping IP地址
#查询IP地址 ifconfig
更改虚拟机名字
vi /etc/hostname
可选关闭selinux
vim /etc/selinux/config
#在文件中将SELIUNX=enforcing修改为
SELIUNX=disabled
重启系统
reboot
2 安装hadoop和jdk
2.1 上传与解压
如果有自带jdk,请卸载
#查询是否安装jdk
rpm -qa|grep java
#卸载已安装的jdk
rpm -e --nodeps 文件名
上传jdk和hadoop安装包到h3cu
上传文件可以使用yum -y install lrzsz
下载lrzsz软件上传文件,
yum -y install lrzsz
下载好后输入rz -E 选择上传的文件,上传的文件会默认上传到当前目录
rz -E
mv 改名字
2.1 配置环境变量
进入配置文件
vim /etc/profile
下移到最后一格,按i进行编辑添加以下内容
export JAVA_HOME=/usr/local/src/jdk
#export JAVA_HOME=jdk文件的路径
export HADOOP_HOME=/usr/local/src/hadoop
#export HADOOP_HOME=hadoop文件的路径
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:
使更改内容生效
source /etc/profile
验证是否安装成功 验证java的命令:
java -version
#出现版本信息就表示安装成功
验证hadoop:
hadoop version
#出现版本信息则表示安装成功
3 ssh免密钥配置
3.1 配置映射
注:每台都要配置
进入文件编辑
vi /etc/hosts
添加以下内容:
192.168.135.21 master
192.168.135.22 slave1
192.168.135.23 slave2
#主机IP地址 主机名
#从机1IP地址 从机1名
#从机2IP地址 从机2名
#(集群内所有机器的映射关系都要配置进去 所有机器保持一致)
sh免密钥配置(每台机器都要执行)
ssh-keygen -t rsa
# 一路回车
ssh-copy-id master
#ssh-copy-id 主机名
# 输入yes 回车后输入再次提示后输入密码
ssh-copy-id slave1
#ssh-copy-id 从机1名
# 输入yes 回车后输入再次提示后输入密码
ssh-copy-id slave2
#ssh-copy-id 从机2名
# 输入yes 回车后输入再次提示后输入密码
配置完成后执行命令
ssh slave1
# ssh 服务器名 验证是否成功
查看是否进入slave1
退出
exit
4 配置hadoop集群
4.1 配置文件
1.找到hadoop下的bin目录
cd /usr/local/src/hadoop/etc/hadoop
搭建集群需要配置bin目录下的六个文件 hadoop-env.sh core-site.xml hdfs-site.xml mapred-site.xml (需要改后缀为xml: mv mapred-site.xml.template mapred-site.xml ) yarn-site.xml slaves
文件一:hadoop-env.sh
export JAVA_HOME=/usr/local/src/jdk
文件二:core-site.xml
<configuration>
<!--hdfs的路径-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://ns1</value>
</property>
<!--hadoop的基础路径-->
<property>
<name>hadoop.tmp.dir</name>
<value>/app/hadoop-repo/tmp</value>
</property>
<!--zk集群地址-->
<property>
<name>ha.zookeeper.quorum</name>
<value>master:2181,slave01:2181,slave02:2181</value>
</property>
</configuration>
文件三:hdfs-site.xml
<configuration>
<!-- 指定nameservices的别名-->
<property>
<name>dfs.nameservices</name>
<value>ns1</value>
</property>
<!-- 指定namenodes.ns1下面有俩个nn-->
<property>
<name>dfs.ha.namenodes.ns1</name>
<value>nn1,nn2</value>
</property>
<!-- 指定nn1的rpc地址和http地址-->
<property>
<name>dfs.namenode.rpc-address.ns1.nn1</name>
<value>master:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.ns1.nn1</name>
<value>master:50070</value>
</property>
<!-- 指定nn2的rpc地址和http地址-->
<property>
<name>dfs.namenode.rpc-address.ns1.nn2</name>
<value>slave01:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.ns1.nn2</name>
<value>slave01:50070</value>
</property>
<!-- namenode元数据存放路径-->
<property>
<name>dfs.namenode.name.dir</name>
<value>/app/hadoop-repo/name</value>
</property>
<!--datanode元数据存放路径 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>/app/hadoop-repo/data</value>
</property>
<!-- journal元数据存放路径-->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/app/hadoop-repo/journal</value>
</property>
<!-- -->
<!--指定元数据共享方式是通过journalnode节点实现 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://master:8485;slave01:8485;slave02:8485/ns1</value>
</property>
<!-- 开启容灾机制(失败自动隔离)-->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!--不可省略 否则会出现路径脑裂-->
<property>
<name>dfs.client.failover.proxy.provider.ns1</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 配置容灾机制的实现方法-->
<property>
<name>dfs.ha.fencing.methods</name>
<value>
sshfence
shell(/bin/true)
</value>
</property>
<!-- sshfence方法需要免密登录-->
<property>
<name>dfs.ha.fencing.ssh-private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<!-- 副本数-->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!--默认权限关闭 -->
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>
文件四:mapred-site.xml(提示 mv mapred-site.xml.template mapred-site.xml )
<configuration>
<!--指定框架名 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!--job历史地址-->
<property>
<name>mapreduce.jobhistory.address</name>
<value>slave01:10020</value>
</property>
<!--job的webapp地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>slave01:19888</value>
</property>
</configuration>
文件五:yarn-site.xml
<configuration>
<!--开启yarn的高可用 -->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!--resourcemanager的族群idcluster-->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yrc</value>
</property>
<!--yarn的高可用需要zk-address-->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>master:2181,slave01:2181,slave02:2181</value>
</property>
<!--指定族群下有俩个resourcemanager-->
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<!--指定族群下rm1的主机名-->
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>slave01</value>
</property>
<!--指定族群下rm2的主机名-->
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>slave02</value>
</property>
<!--指定nodemanager的服务为shuffle-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--开启日志聚集功能-->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!--设置日志聚集服务器地址-->
<property>
<name>yarn.log.server.url</name>
<value>http://hadoop121:19888/jobhistory/logs</value>
</property>
<!--设置日志保留时间为7天-->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
<!--设置yarn历史服务器地址-->
<property>
<name>yarn.log.server.url</name>
<value>http://hadoop121:19888/jobhistory/logs</value>
</property>
<!--关闭yarn内存检查-->
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
<!--是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认是true -->
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<!--是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是true -->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
</configuration>
文件六:slaves(3.1.4版本为workers)
# 指定datanode的机器
master
slave1
slave2
发送文件
配置完成后将这个hadoop文件发送给其他两台机器一份
scp -r /usr/local/src slave1:/usr/local/src
scp -r /usr/local/src slave2:/usr/local/src
#scp -r hadoop路径 从机1:hadoop路径
4.2 启动集群
启动journalnode(有journalnode的都要启动)
./sbin/hadoop-daemon.sh start journalnode
格式化集群(在主机上执行即可)
./bin/hadoop namenode -format
格式化zk(在主机执行即可)
./bin/hdfs zkfc -formatZK
启动zkfc来监控namenode的状态(有namenode的都要执行)
./sbin/hadoop-daemon.sh start zkfc
启动namenode(在主机执行即可)
./sbin/start-dfs.sh
启动YARN(MR)(指定哪台机器就在哪里启动)
./sbin/start-yarn.sh
无脑启动
start-all.sh
#关闭
stop-all.sh
单独启动/关闭 hdfs相关节点(namenode datanode)
hadoop-daemon.sh start/stop datanode/namenode
单独启动/关闭yarn相关节点(resourcemanager nodemanager)
yarn-daemon.sh start/stop nodemanager/resourcemanager
方法四:
强制关闭某个节点
kill -9 2181
开启/关闭 历史服务jobhistory
mr-jobhistory-daemon.sh start/stop historyserver
4.3 检查集群
查看日志
tail -200 hadoop-root-datanode-master.log
主机查看节点
查看节点命令
jps
出现以下五个节点才算成功
6617 NameNode 6719 DataNode 7104 NodeManager 7140 Jps 7005 ResourceManager
从机1查看节点:
出现以下四个节点才算成功
23002 NodeManager 23034 Jps 22816 DataNode 22918 SecondaryNameNode
从机2查看节点: 出现以下三个节点才算成功
23146 Jps 22983 DataNode 23114 NodeManager
浏览器端口查看
hdfs服务:
http://192.168.6.135:50070
# http://IP地址:50070
yarn服务:
http://192.168.6.135:8088
#http://IP地址:8088
运行wordcount程序 yarn jar /home/bigdate/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.1.jar wordcount /test/dream.txt /output/01
hdfs服务相关节点: NameNode DataNode SecondaryNameNode hdfs服务相关节点: NodeManager ResourceManager
5 hdfs
5.1 查看
# 查看文件列表
hdfs dfs -ls /路径
hdfs dfs -ls -R /路径
# 查看文件内容
hdfs dfs -cat /文件路径
hdfs dfs -tail /文件路径
5.2 创建文件夹
hdfs dfs -mkdir /路径
hdfs dfs -mkdir -p /一个多级空目录
5.3 上传
hdfs dfs -put /本地文件路径 /hdfs的文件路径
moveFromLocal(剪切上传)
hdfs dfs -moveFromLocal f.txt /
5.4 下载
hdfs dfs -get /hdfs的文件路径 /本地路径
5.5 删除
hdfs dfs -rm -R /删除一个非空的目录
5.6 文件操作
hdfs dfs -chmod 777 /test/f.txt
hdfs dfs -chmod u-x /test/f.txt
# checksum查看文件的校验和
hdfs dfs -checksum /test/f2.txt
# -count 查看一个路径的目录数量 文件大小 占用的大小
hdfs dfs -count /test
# cp hdfs文件系统内部文件的拷贝
hdfs dfs -cp /test/f.txt /demo/
5.7 重命名和修改路径
# 直接剪切 不改名字
hdfs dfs -mv /test/f2.txt /demo/
# 把f2.txt进行剪切 并把名字改为ff.txt
hdfs dfs -mv /test/f2.txt /demo/ff.txt
6 MySQL
6.1 windows安装
将mysql安装为windows服务
mysqld -install
启动mysql
net start mysql
关闭mysql
net stop mysql
6.1.1 命令
登录数据库
mysql -uroot -p
修改密码
alter user 'root'@'localhost' identified by '想要设置的密码';
退出数据库
exit
进入数据库
use 文件名;
创建数据库
create database;
查询数据库
show databases;
删除数据库
drop database;
查看表名
show tables
查询表
select 查询列 from 表名 WHERE 查询条件 and 查询条件;
#模糊查询有北京的行
where saddress like '%北京%';
#详细查询
where saddress '北京';
#查询时重命名
select 命名前 命名后,命名前 命名后 from students;
查看设计表
desc students;
更新数据行
UPDATE 表名 SET 列名 = 更新值 [WHERE 更新条件]
删除数据行
delete from 表名 where (删除条件)
插入数据行
INSERT [INTO] 表名 [(列名)] VALUES (值列表)
表内排序
order by 排序表 desc limit 显示行数;
添加表
create table 表名(表数据行);
日期函数
将指定的数值添加到指定的日期部分后的日期
select date_add(now(),interval 50 day);
#以当前日期增加50
select date_sub(now(),interval 50 day);
#以当前日期减少50
查询当前年月日
select date_format(curdate(),'%Y年%m月%d日');
取整数(进一法)
select ceiling(40.4);
#41
取整数(退一法)
select floor(40.7);
#40
6.2 linux
6.2.1 在线安装
使用命令就直接下载了安装用的Yum Repository,大概25KB的样子,然后就可以直接yum安装了。
wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
安装mysql
yum -y install mysql57-community-release-el7-10.noarch.rpm
yum -y install mysql-community-server
启动mysql
systemctl start mysqld.service
查看运行状态
systemctl status mysqld.service
找出日志文件的密码
grep "password" /var/log/mysqld.log
#2021-10-27T12:57:43.773180Z 1 [Note] A temporary password is generated for root@localhost: buEOy8grdX!+
# 日志文件最后一个分号后的就是初始密码
登录mysql
mysql -uroot -p
修改初始密码(修改的密码因为有密码规范的问题 必须要是数字大小写字母特殊符号组成 后面会讲到如何修改密码规范)
ALTER USER 'root'@'localhost' IDENTIFIED BY '123QWEqwe!@#';
修改密码规范
# 密码复杂度为0
set global validate_password_policy=0;
# 密码长度为1
set global validate_password_length=1;
开启mysql的远程访问
grant all privileges on *.* to 'root'@'%' identified by 'password' with grant option;
刷新权限
flush privileges
6.1.2 离线安装
下载mysql的离线安装包
https://dev.mysql.com/downloads/mysql/
# 注意选择对应的版本
# Select Operating System 这一项选择:
# Red Hat Enterprise Linux / Oracle Linux
查看系统自带的Mariadb
[root@CDH-141 ~] rpm -qa | grep mariadb
mariadb-libs-5.5.44-2.el7.centos.x86_64
卸载系统自带的Mariadb
rpm -e --nodeps mariadb-libs-5.5.44-2.el7.centos.x86_64
检查mysql是否存在
rpm -qa | grep mysql
xftp上传 然后解压
# 这里是 xf 不是 zxvf !
tar -xf mysql-5.7.27-1.el7.x86_64.rpm-bundle.tar -C /home/mysql/
解压后会有很多的rpm文件 移动到mysql目录里进行安装
rpm -ivh mysql-community-client-5.7.36-1.el7.x86_64.rpm --nodeps
rpm -ivh mysql-community-common-5.7.36-1.el7.x86_64.rpm --nodeps
rpm -ivh mysql-community-devel-5.7.36-1.el7.x86_64.rpm --nodeps
………………
# 安装显示的所有rpm包
6.3 sql语句
6.3.1 数据库操作
## 创建数据库 ##
# 格式
mysql> CREATE DATABASE `数据库名` character set utf8 collate utf8_general_ci;
# 演示
mysql> create database TestDatabase character set utf8 collate utf8_general_ci;
## 删除数据库 ##
# 格式
mysql> drop database 数据库名;
# 演示
mysql> drop database TestDatabase;
## 查看数据库 ##
# 格式
mysql> show databases;
## 选择数据库 ##
# 格式
mysql> use 数据库名;
# 演示
mysql> use useTestDatabase;
6.3.2 数据类型
数值类型
日期和时间类型
字符串类型
6.3.3 数据表操作
6.3.3.1 创建-删除-查看-表
## 删除数据表 ##
# 格式
drop table `数据表名`;
# 演示
drop table `student`;
## 清空数据表 ##
# 格式
mysql> delete from `表名`;
truncate table `表名`; (清除自增值)
# 演示
mysql> delete from `test`;
## 查看所有数据表 ##
# 格式
mysql> show tables;
## 创建数据表
# 格式 (column_name:字段 column_type:列类型)
mysql> create table TestDatebase(column_name column_type);
# 演示
mysql> create table if not exists `student`(
`id` int unsigned auto_increment,
`name` varchar(100) CHARACTER SET utf8 not null,
`age` varchar(10) default '18' not null,
`sex` varchar(10) not null,
`submission_time` date,
primary key ( `id` ),
unique ( `name` )
) default charset=utf8;
演示解析:
-
如果想让字段不为null 可以设置not null 在输入时数据为null则会报错
-
auto_increment 定义自增属性 数值会自动加1 一般用于主键
-
primart key 用于定义主键 定义多个主键用逗号分隔
-
engine 设置存储引擎 charset 设置编码
-
unsigned 无符号的 表示没有正负之分
6.3.3.2 主键
主键值必须唯一标识表中的每一行,且不能为 NULL,即表中不可能存在有相同主键值的两行数据。这是唯一性原则。主键可以作为其他表的外键
## 主键 ##
# 格式
mysql> primary key ( `字段` )
SELECT * FROM student
(SELECT * FROM arms) AS tmp;
6.3.3.3 索引
## 唯一索引 ##
# 格式
mysql> CREATE UNIQUE INDEX 索引名 ON 表名 (字段);
# 演示
mysql> CREATE UNIQUE INDEX name_uk ON student (name);
## 删除索引 ##
# 格式
mysql> drop index 索引名 on 表名;
# 演示
mysql> drop index name_uk on student;
6.3.3.4 外键
## 外键 ##
# 格式
mysql> alter table `表名` add constraint `外键名` foreign key (`你的外键字段名`) references `外表表名(对应的表的主键字段名)`;
# 演示
mysql> alter table `student` add constraint `arms_fk` foreign key (`StudentTmp`) references `student(name)`;
## 删除外键 ##w
mysql> alter table `student` drop foreign key `arms_fk`;
6.3.3.5 表内容操作
## 查看表结构 ##
#格式
mysql> desc `studnt`;
## 添加字段 ##
# 格式
mysql> alter table 表名 add 字段 类型 约束(可不添加);
# 演示
mysql> alter table `student` add `mail` varchar(255) not null;
## 删除字段 ##
# 格式
mysql> alter table `表名` drop `字段`;
# 演示
mysql> alter table `student` drop `arms`;
## 修改字段 ##
# 格式
mysql> alter table `表名` modify `字段名` `类型` `约束`;
# 演示
mysql> alter table `student` modify `age` `int(100)` not null;
## 修改字段默认值 ##
# 格式
mysql> alter table `表名` alter `字段` set default `默认值`;
# 演示
mysql> alter table student alter name set default '无';
## 删除字段默认值 ##
# 格式
mysql> alter table `表名` alter `字段` drop default;
# 演示
mysql> alter table student alter name drop default;
## 修改表名 ##
# 格式
mysql> alter table `表名` rename `新表名`;
# 演示
mysql> alter table `student` rename `students`;
6.3.3.6 插入数据
## 插入数据 ##
# 格式
mysql> insert into `表名`
(`插入列名`, `插入列名`, `插入列名`)
values
('数据', '数据', '数据');
# 演示 如果输入的类型是char 则需要加''
mysql> insert into `student`
(`name`, `sex`, age)
values
('小明', '男', 18);
# 插入多条数据
mysql> insert into `student`
(`name`, `sex`, `age`)
values
('小明', '男', 18),('小李', '男', 18);
6.3.3.7 查询数据
## 数据表查询 ##
# 格式 (字段可有多个 这里用两个演示)
mysql> select `字段`,`字段`
from `表名`,`表名`
[where clause]
[limit n] [offset m ]
# 演示
mysql> select * from `student`;
-
where子句
如需有条件地从表中选取数据,可使用 selece 中的 where 语句
## hwere子句 ##
# 格式 (and表示与关系 可以用or表示或关系)
mysql> select `字段`,`字段` from `表名` where `条件1` and `条件2`;
# 演示 where (如果有多个where条件 可以用and连接)
mysql> select `name`, `age` from `student` where age=18 and = '小明'; -
like子句
如需获取含有某个字符的字段 可以使用like 子句
sql like 子句中使用百分号 % 字符来表示任意字符
## like子句 ##
# 格式 ( 这里百分号表示匹配前后任意字符 )
mysql> select `字段`,`字段` from `表名` where `字段` like %字符%;
# 演示 (筛选年龄20~29的数据)
mysql> select * from `student` where age like 2%; -
子查询
子查询就是在一个select中嵌套了另外一个查询 常用于查询一些复杂内容
程序先运行在嵌套在最内层的语句,再运行外层。因此在写子查询语句时,可以先测试下内层的子查询语句是否输出了想要的内容,再一层层往外测试,增加子查询正确率。否则多层的嵌套使语句可读性很低。
## 子查询 ##
# 格式
mysql> select `字段` from (嵌套的查询) as tmp 条件;
# 演示
mysql> select * from (select * from student where id>1 ) as tmp where id<5;
6.3.3.8 修改(更新)数据
## 更新数据 ##
# 格式
mysql> update `表名` set `字段`=`更新值` where `更新条件`;
# 演示
mysql> update `student` set `name`='小韩' where id=1;
6.3.3.9 删除数据
## 删除数据 ##
# 格式
delete from `表名` where `条件`;
# 演示
delete from `student` where id=1;
6.3.3.10 union 操作符
union 操作符用于连接两个以上的 select 语句的结果组合到一起,多个 select 语句会删除重复的数据,如需要所有数据 可使用 union all (保留所有数据)
## union ##
# 格式
mysql> select `字段1`,`字段2`,…………`字段n` from `表名`
union all
select `字段1`,`字段2`,…………`字段n` from `表名`
where `条件`
# 演示
mysql> select id,name,age from `student`
union all
select id,name,age from `student1`
where name='小明';
6.3.3.11 别名
## 别名 ##
# 格式
mysql> select `字段` as `别名` from `表名`;
# 演示
mysql> select name as na from student;
6.3.3.12 排序
如果需要对读取的数据进行排序, 可以使用 order by 子句来进行设定
可以使用 asc(升序) edsc(降序) 来决定排列, 默认是按升序排序
也可以添加 where like 来设置条件
## order by ##
# 格式
mysql> select `字段` from `表名` order by `条件`;
# 格式
mysql> select * from `student` order by `id` desc;
6.3.3.13 分组
## 分组 ##
# 格式 (分组条件中有几个字段 select后的字段也要有一样字段)
mysql> select `字段` from `表名` group by `字段`;
# 演示
mysql> select `age` from `student` group by `age`;
mysql中五种常用的聚合函数:
(1)max(列名):求最大值。
(2)min(列名):求最小值。
(2)sum(列名):求和。
(4)avg(列名):求平均值。
(5)count(列名):统计记录的条数。
## 聚合函数 ##
# 格式
mysql> select `字段`, `聚合函数(字段)` as `别名` from `表名` group by `字段`;
# 演示
mysql> select `age`, count(age) as age_count from student group by `age`;
6.3.3.14 连接
-
inner join(内连接,或等值连接):获取两个表中字段匹配关系的记录。
-
left join(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
-
right join(右连接):与 left join 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
## 内连接 ##
# 格式
mysql> select `字段` from `表名` inner join `表名` on `条件`;
# 演示
mysql> select s.id,s.name,a.id,a.name from `student` as s inner join `student01` as a on s.name=a.name;
## 左连接 ##
# 格式
mysql> select `字段` from `表名` left join `表名` on `条件`;
# 演示
mysql> select s.id,s.name,a.id,a.name from `student` as s left join `student01` as a on s.name=a.name;
## 右连接 ##
# 格式
mysql> select `字段` from `表名` right join `表名` on `条件`;
# 演示
mysql> select s.id,s.name,a.id,a.name from `student` as s right join `student01` as a on s.name=a.name;
6.3.3.14 null值处理
IS NULL: 当列的值是 NULL,此运算符返回 true。
IS NOT NULL: 当列的值不为 NULL, 运算符返回 true。
<=>: 比较操作符(不同于 = 运算符),当比较的的两个值相等或者都为 NULL 时返回 true。
null值不可以用 = 与 != 来查找,在mysql中 null与其他任何值的比较永远返回true
## null值处理 ##
# 格式
mysql> select `字段` from `表名` where `字段` is not null;
# 演示
mysql> select * from student where name is not null;
6.3.3.14 事物
在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。
## 事物 ##
# 格式
mysql>
# 演示
mysql>
6.3.3.15 临时表
临时表在我们需要保存一些临时数据时非常有用,临时表只有3.23以上的版本可以使用
-
临时表只在当前连接可见,当关闭连接时,Mysql会自动删除表并释放所有空间。
-
可用drop table 删除临时表
-
使用show tables 命令无法查看到临时表
## 临时表 ##
# 格式
mysql> create temporary table `表名` ( `表内容` );
# 演示
MySQl> create temporary table `student1` (`id` int);
6.3.3.16 导入导出
## 导出 ##
# 格式
mysql> select `显示字段` from `表名` into outfile '导出路径';
# 演示
mysql> select * from student into outfile '/opt/data';
mysql> SELECT a,b,a+b INTO OUTFILE '/tmp/result.text'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM test_table;
## 导入 ##
# 格式
mysql> LOAD DATA LOCAL INFILE '导入文件' INTO TABLE `表名`;
# 演示
mysql> LOAD DATA LOCAL INFILE '/opt/data' INTO TABLE ``;
7 Sqoop
7.1 Sqoop安装
下载压缩包
http://archive.cloudera.com/cdh5/cdh/5/sqoop-1.4.6-cdh5.14.2.tar.gz
解压
tar zxvf sqoop-1.4.6-cdh5.14.2.tar.gz -C /usr/local/src/
修改conf中的配置文件
# 重命名文件
mv sqoop-env-template.sh sqoop-env.sh
在文件中添加内容
#Set path to where bin/hadoop is available
export HADOOP_COMMON_HOME=/usr/local/src/hadoop-2.6.0-cdh5.14.2
#Set path to where hadoop-*-core.jar is available
export HADOOP_MAPRED_HOME=/usr/local/src/hadoop-2.6.0-cdh5.14.2
在lib下添加两个必要的包
mv /opt/java-json.jar ./lib/
mv /opt/mysql.connector-java-5.1.38.jar ./lib/
配置环境变量
vim /etc/profile
export SQOOP_HOME=/usr/local/src/sqoop
export PATH=:$SQOOP_HOME/bin:$PATH
7.2 数据操作
列出hadoop163主机所有的数据库
bin/sqoop list-databases --connect jdbc:mysql://hadoop163:3306/ --username root --password 123456
查看某一个数据库下面的所有数据表
bin/sqoop list-tables --connect jdbc:mysql://192.168.6.157:3306/mysql --username root --password 123456
8 zookeeper
8.1 zookeeper安装
修改目录下的conf的zoo.cfg文件
dataDir=/
server.3=master:2888:3888
server.2=slave1:2888:3888
server.1=slave2:2888:3888
#netstat -nltp | grep 2181 查看端口
在根目录下新建文件夹zkmyid并创建myid文件
mkdir zkmyid
# 在zkmyid中
vim myid
# myid中写myid的值
启动zookeeper:
zookeeper安装目录/bin/zkServer.sh start
查看zookeeper集群:
zookeeper安装目录/bin/zkServer.sh status
连接zookeeper:
zookeeper安装目录/bin/zkCli.sh -server 主机名:端口号
退出:
quit
创建永久性节点:
create /创建路径
创建临时节点:
create -e /创建路径
创建永久性序列化节点:
create -s /创建路径
创建临时性序列化节点:
create -s -e /创建路径
#注:临时节点不能创建子节点
修改节点数据:
set /路径 内容
查看节点数据:
get /路径
删除节点:
delete /路径
删除节点(可以进行递归删除):
rmr /路径
#zookeeper3.5版本以上已经弃用rmr 改用deleteall
列出曾经输入过的命令:
history
8.2 节点属性
= 0 = 1 = 0 = 0x0
dataLength = 5 numChildren = 0
dataVersion :数据版本号,每次对节点进行更新时,值都会加1,(即使设置的是相同的数据)
cversion :字节点的版本号,当znode的字节点有变化时值会加1
aclVersion:ACL的版本号
cZxid:zonde创建的事务id
mZxid:znode被修改的事务id,每次对znode的修改都会更新mZXid
ctime:节点创建的时间戳
mtime:节点最新一次更新发生时的时间戳
ephemeralOwner:如果该节点为临时节点,ephemeralOwner的值表示与该节点绑定sessin id。如果不是,ephemeralOwner的值为0
添加watch机制:get /路径 watch
watcher得到的事件是被封装过的,包括三个内容,keeperState,eventType,path
keeperState | eventType | 触发条件 | 说明 |
---|---|---|---|
None | 连接成功 | ||
SyncConnected | NodeCreated | Znode被创建 | 此时处于连接状态 |
SyncConnected | NodeCreated | Znode被删除 | 此时处于连接状态 |
SyncConnected | NodeDataChanged | Znode数据被改变 | 此时处于连接状态 |
SyncConnected | NodeDataChanged | Znode的ziZnode数据被改变 | 此时处于连接状态 |
Disconnected | None | 客户端和服务端断开连接 | 此时客户端和服务器处于断开连接状态 |
Expired | None | 会话超时 | 会收到一个SessionExpiredExceptio |
AuthFailed | None | 权限验证失败 | 会收到一个AuthFailedException |
9 spark
9.1 spark高可用搭建
解压文件
tar zxvf /opt/moudle/spark-2.1.1.tar.gz -C /opt/moudle
进入spark根目录的conf文件下
cd /opt/moudle/spark-2.1.1/conf/
去掉spark-env.sh.template
与spark-defaults.conf.template
文件后的tmplate后缀
mv spark-env.sh.template spark-env.sh
mv spark-defaults.conf.template spark-defaults.conf.sh
mv slaves.template slaves
修改配置文件
slaves
hadoop101
hadoop102
hadoop103
spark-env.sh
# Jdk路径
export JAVA_HOME=/opt/moudle/jdk1.8.0_101
# master节点 ha配置不需要
# SPARK_MASTER_HOST=Hadoop101
# SPARK_MASTER_PORT=7077
# 添加日志配置
export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.fs.logDirectory=hdfs://hadoop101:8020/spark_log -Dspark.history.retainedApplications=30"
SPARK_MASTER_WEBUI_PORT=8989
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=hadoop101,hadoop102,hadoop103 -Dspark.deploy.zookeeper.dir=/spark"
spark-default.conf
spark.eventLog.enabled true
spark.eventLog.dir hdfs://hadoop103:8020/directory
启动节点
./sbin/start-all.sh
运行jar包
bin/spark-submit \
--class aa \
--master yarn \
--deploy-mode cluster \
/opt/jar/spark1.jar
9.2 idea开发spark
0.下载idea的压缩包,并解压到自己想要的目录
创建桌面快捷方式
(如果是普通用户,请不要在桌面直接创建,请在其他目录创建好后拷贝到桌面下。如普通用户直接在桌面创建,会因权限不足而无法启动,root用户无此问题)
touch idea.desktop
sudo vi idea.desktop
添加内容
[Desktop Entry]
Name=IntelliJ IDEA
Comment=IntelliJ IDEA
# 找到自己idea解压的目录里的bin 下的idea.sh 和 idea.png
Exec=/usr/local/ideaIU/bin/idea.sh
Icon=/usr/local/ideaIU/bin/idea.png
Terminal=false
Type=Application
Categories=Developer;
sudo chmod +x idea.desktop
1.需要下载Maven的安装包
https://archive.apache.org/dist/maven/maven-3/
2.解压后在idea中打开设置
修改maven home path 为自己的路径
maven settings file 为maven根目录下conf中的settings.xml
3.idea设置中plugins下载scala插件
4.添加scala SDK
打开Project Structure(项目设置 快捷键 Ait+Shift+Ctrl+S)
选择Global Libraries
点左上角的+号
在点击左下角的download 选择自己需要的版本下载
5.新建maven项目
新建项目 选择maven 无脑下一步 注意选择存放路径
6.添加pom.xml文件
在项目中可以看见pom.xml文件 删除掉里面的内容 添加以下内容
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>sparkcore</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.spark</groupId>
<!--这里的内容需要与自己的版本号对应-->
<!--版本号可在项目设置中的 Global Libraries 查看(下文也有查看方法)-->
<artifactId>spark-core_2.11</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
版本号查看方法
7.添加log4j.properties文件
在项目中的./src/main/resources/创建log4j.properties文件(创建时就选择file 文件名就是log4j.properties )
添加内容
log4j.rootLogger=warn, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p --- [%50t] %-80c(line:%5L) : %m%n
9.3 spark案例
9.3.1 案例一:WordConut
9.3.2 案例二:ADConut
9.4 集群测试
9.5 sparkSQL
10.hive
10.1 hive安装
准备文件:
apache-hive-1.2.1-bin.tar.gz
mysql-connector-java-5.1.39.jar
解压hive的压缩文件
tar -zxvf apache-hive-1.2.1-bin.tar.gz -C /usr/local/src/
修改名称
mv apache-hive-1.2.1-bin/ hive
配置环境变量(/etc/profile)
export HIVE=/usr/local/src/hive
export PATH=$PATH:$HIVE/bin:
添加mysql-connector-java-5.1.39.jar到lib目录下
mv mysql-connector-java-5.1.39.jar /usr/local/src/hive/lib
修改hive-env.sh
mv hive-env.sh.template hive-env.sh
vim hive-env.sh
添加内容
# 配置HADOOP_HOME路径
export HADOOP_HOME=/usr/local/src/hadoop-2.7.1
# 配置HIVE_CONF_DIR路径
export HIVE_CONF_DIR=/usr/local/src/hive/conf
创建hive-site.xml
vim ./conf/hive-site.xml
添加内容
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!--配置hive连接mysql所需要的jdbc支持-->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://master:3306/hive?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false</value>
</property>
<!--配置MySQLDriver-->
<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>
<property>
<name>datanucleus.readOnlyDatastore</name>
<value>false</value>
</property>
<property>
<name>datanucleus.fixedDatastore</name>
<value>false</value>
</property>
<property>
<name>datanucleus.autoCreateSchema</name>
<value>true</value>
</property>
<property>
<name>datanucleus.schema.autoCreateAll</name>
<value>true</value>
</property>
<property>
<name>datanucleus.autoCreateTables</name>
<value>true</value>
</property>
<property>
<name>datanucleus.autoCreateColumns</name>
<value>true</value>
</property>
<!--启用本地服务器连接Hive-->
<property>
<name>hive.metastore.local</name>
<value>true</value>
</property>
<!-- 显示表的列名 -->
<property>
<name>hive.cli.print.header</name>
<value>true</value>
</property>
<!-- 显示数据库名称 -->
<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
</property>
</configuration>
格式化数据库
schematool -dbType mysql -initSchema
启动hive
hive
10.2 hive基本操作
创建数据表
create table hotel (
id bigint,
name string,
age long
) row format delimited fields terminated by ',';
-
row formt delimited fields terminateb by ',' 表示以','分隔
导入数据
# 本地导入
load data local inpath '/opt/data/hotel.csv' into table hotel;
# hdfs导入
load data inpath '/input/*' into table hotel;
# hotel 是表名
# '' 是路径