新建 Maven 工程
在本地 shell 下进入您想要新建工程的目录,例如 D://mavenWorkplace 中,输入如下命令新建一个 Maven 工程:
mvn archetype:generate -DgroupId=$yourgroupID -DartifactId=$yourartifactID -DarchetypeArtifactId=maven-archetype-quickstart
其中 $yourgroupID 即为您的包名。$yourartifactID 为您的项目名称,而 maven-archetype-quickstart 表示创建一个 Maven Java 项目。工程创建过程中需要下载一些文件,请保持网络通畅。
创建成功后,在 D://mavenWorkplace 目录下就会生成一个名为 $yourartifactID 的工程文件夹。其中的文件结构如下所示:
simple---pom.xml 核心配置,项目根下---src---main---java Java 源码目录---resources Java 配置文件目录---test---java 测试源码目录---resources 测试配置目录
其中我们主要关心 pom.xml 文件和 main 下的 Java 文件夹。pom.xml 文件主要用于依赖和打包配置,Java 文件夹下放置您的源代码。
添加phoenix依赖
<properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><phoenix.version>5.1.2</phoenix.version></properties><dependency><groupId>org.apache.phoenix</groupId><artifactId>phoenix-hbase-compat-2.3.0</artifactId><version>${phoenix.version}</version></dependency><dependency><groupId>org.apache.phoenix</groupId><artifactId>phoenix-core</artifactId><version>${phoenix.version}</version></dependency><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>1.8</source><target>1.8</target><encoding>utf-8</encoding></configuration></plugin><plugin><artifactId>maven-assembly-plugin</artifactId><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>
其中,phoenix.version 与集群中 phoenix 版本保持一致。
创建 JDBC 连接对象
package Phoenix;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.sql.Statement;public class PhoenixJdbc {static {try {Class.forName("org.apache.phoenix.jdbc.PhoenixDriver");} catch (ClassNotFoundException e) {e.printStackTrace();}}public static void main(String[] args) {String createSql = "create table if not exists user_tb(id VARCHAR,uname VARCHAR CONSTRAINT pk PRIMARY KEY (id))";Connection connection = null;try {String ipList = "${zk_ip1},${zk_ip2},${zk_ip3}:2181";String znodeParent = "${znodeParent}";String url = "jdbc:phoenix:" + ipList + ":" +znodeParent;connection = DriverManager.getConnection(url);Statement statement = connection.createStatement();statement.executeUpdate(createSql);statement.executeUpdate("upsert into user_tb values ('1','张三')");statement.executeUpdate("upsert into user_tb values ('2','李四')");connection.commit();} catch (SQLException throwables) {throwables.printStackTrace();}}}
其中 ${zk_ip1} , ${zk_ip2} , ${zk_ip3} 为 Zookeeper 节点内网 ip,2181 为 Zookeeper 默认监听端口;${znodeParent} 为 hbase 中 hbase-site.xml 配置文件里 zookeeper.znode.parent 参数的值。
编译代码并打包上传
如果您的 Maven 配置正确并且成功的导入了依赖包,那么整个工程应该没有错误可以直接编译。在本地命令行模式下进入工程目录,执行下面的命令对整个工程进行打包:
mvn package
上传到EMR集群的Hbase节点,在本地命令行模式下运行:
scp $localfile root@公网IP地址:$remotefolder
其中,$localfile 是您的本地文件的路径加名称;root 为 CVM 服务器用户名;公网 IP 可以在 EMR 控制台的节点信息中或者在云服务器控制台查看;$remotefolder 是您想存放文件的 CVM 服务器路径。上传完成后,在 EMR 命令行中即可查看对应文件夹下是否有相应文件。
运行样例
首先需要登录 EMR 集群中的 Hbase 组件节点,建议登录到 Master 节点。登录 EMR 的方式请参考 登录 Linux 实例。这里我们可以选择使用 WebShell 登录。单击对应云服务器右侧的登录,进入登录界面,用户名默认为 root,密码为创建 EMR 时用户自己输入的密码。输入正确后,即可进入命令行界面。
在 EMR 命令行先使用以下指令切换到 hadoop 用户:
su hadoop
然后进入您存放 jar 包的文件夹下,执行以下指令:
java -cp $jar包名 $类全限定名
其中 $jar包名为先前上传的 EMR 节点的包名,$类全限定名为 java main 方法的全限定名 package.mainclass。