一.安装mysql并且实现外部连接
1.下载mysql客户端
网址 : https://dev.mysql.com/downloads/mysql/5.6.html#downloads
下载好压缩包之后,上传到虚拟机上
1.解压: tar -zxvf mysql-5.6.44-linux-glibc2.12-x86_64.tar.gz
2.重命名 : mv mysql-5.6.44-linux-glibc2.12-x86_64 mysql
3.创建mysql组和用户:
groupadd mysql
useradd -r -g mysql mysql
4.添加配置文件my.cnf,并修改相关配置
cp support-files/my-default.cnf /etc/my.cnf
vi /etc/my.cnf
basedir = /usr/local/mysql -------------------------安装目录
datadir = /usr/local/mysql/data ---------------------安装目录下的data
port = 3306 ----------------------------------------------端口
log-err = /usr/local/mysql/data/error.log ----------日志
pid-file = /usr/local/mysql/data/mysql.pid --------- pid不要动
5. 修改权限
chown -R mysql /usr/local/mysql(mysql的安装路径)
chgrp -R mysql /usr/local/mysql(mysql的安装路径)
(mysql安装路径)/scripts/mysql_install_db --user=mysql
chown -R root /usr/local/mysql(mysql的安装路径)
chown -R mysql /usr/local/mysql/data
6.初始化数据库
在scripts下有一个 mysql_install_db文件
执行:
mysql_install_db --verbose --user=root --defaults-file=/etc/my.cnf --datadir=/usr/local/mysql/data --basedir=/usr/local/mysql --pid-file=/usr/local/mysql/data/mysql.pid --tmpdir=/tmp
datadir --->对应/etc/my.cnf 中配置的datadir
basedir --->mysql的安装目录
pid-file ---> (mysql安装目录)/data/mysql.pid (不需要有这个文件)
7.执行
bin/mysqld_safe --defaults-file=/etc/my.cnf --socket=/tmp/mysql.sock --user=root &
执行不完,不要强制停止,重新开启一个shell
8.设置开机自启动
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqldcp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysql
chmod 700 /etc/init.d/mysql
chkconfig --add mysqld
chkconfig --level 2345 mysqld on
chown mysql:mysql -R /usr/local/mysql/
重新启动linux: init 6
查看mysql状态 : service mysqld status
参考文章: https://www.cnblogs.com/duanrantao/p/8988116.html
9.添加远程访问权限。
ln -s /usr/local/mysql/bin/mysql /usr/bin (mysql的安装路径)
进入mysql : mysql -uroot -p
执行:GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'duan' with grant option;
执行:Flush privileges;
重启linux 。
10.设置mysql密码
修改mysql密码,进入mysql shell :mysql -u root -p (没密码直接回车)
格式:set password for 用户名@localhost = password('新密码');
样例: set password for root@localhost = password('123'); //不要忘了引号
11.win连接虚拟机mysql(前提是虚拟机和win环境之间ping的通)
1 . 在安装mysql的虚拟机上执行 : service iptables status(查看防火墙状态)
2 . 查看所有端口 netstat -ntlp
可以看到3306已经开放,如果未开放 执行 :
vim /etc/sysconfig/iptables
并再文件中添加一行:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
重启防火墙 : service iptables restart
连接测试(成功):
二 . 安装hive
1.下载hive安装包 : http://mirror.bit.edu.cn/apache/hive/hive-2.3.5/
下载完成后上传至linux自定义文件夹(以/opt 为例) apache-hive-2.3.5-bin.tar.gz
2 . 解压
tar -zxvf apache-hive-2.3.5-bin.tar.gz
3 . 修改hive相关配置
hive-site.xml
有个很坑爹的地方就是这个文件在conf里没有,我这个包是在路径:
/opt/apache-hive-2.3.5-bin/hcatalog/etc/hcatalog/proto-hive-site.xml
把这个文件复制到conf里并改名 hive-site.xml
添加配置
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive_metadata?&createDatabaseIfNotExist=true&characterEncoding=UTF-8&useSSL=false</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>datanucleus.schema.autoCreateAll</name>
<value>true</value>
</property>
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
添加mysql驱动包在hive里
下载 : https://dev.mysql.com/downloads/connector/j/
下载后解压,把下图jar包上传至hive安装目录下的 lib 文件夹
上传后结果:
4.配置hive的环境变量(省略)
5.初始化hive
执行:schematool -dbType mysql -initSchema
6.环境变量配置成功的情况下,任意位置输入hive ,执行几个简单的语句试试吧。
三 . java API操作HIVE
pom.xml
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-jdbc</artifactId>
<version>2.3.5</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.7.6</version>
</dependency>
导包:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
代码:
private static StringdriverName ="org.apache.hive.jdbc.HiveDriver";
public static void main(String[] args)throws SQLException {
try {
Class.forName(driverName);
}catch (ClassNotFoundException e) {
e.printStackTrace();
System.exit(1);
}
Connection con = DriverManager.getConnection("jdbc:hive2://192.168.242.252:10000/default","root","root");
Statement stmt = con.createStatement();
String tableName ="helloHive";
stmt.execute("drop table if exists " + tableName);
stmt.execute("create table " + tableName +" (key int,value string)");
System.out.println("create table success !!!");
con.close();
}
1.打开hive的10000端口
1. hive --service metastore& 如果运行不结束不要强行停止,新开一个shell
2. hive --service hiveserver2& 如果运行不结束不要强行停止,新开一个shell
3. netstat -ntulp |grep 10000 检查端口是否开启
2.运行代码
1报错:
java.sql.SQLException: Could not open client transport with JDBC Uri: jdbc:hive2://hdp3:10000/default: Failed to open new session: java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: root is not allowed to impersonate anonymous
需要提供HDFS的RESTful接口,可通过此接口进行HDFS文件操作。
在 hdfs-site.xml 中添加
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
在 core-site.xml 中
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
再次运行就没问题了。
网友评论