1 虚拟机配置

如果选择最小安装,会没有ifconfig和vim,需要安装

 # ifconfig
 yum provides ifconfig
 yum install net-tools
 
 # vim
 yum -y install vim*
 # wget
 yum -y install wget
 #
 yum -y install expect

1.1 关闭防火墙

查看防火墙的状态:

 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

keeperStateeventType触发条件说明
  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.templatespark-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&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;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 是表名
# '' 是路径

 

 

 

posted on 2021-12-14 19:36  看见小行星  阅读(88)  评论(0编辑  收藏  举报