用spark将hive数据导入到hbase中

Log Type: stderr

Log Upload Time: Thu Dec 13 14:59:19 +0800 2018

Log Length: 2873

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/data/yarn/nm/usercache/hadoop/filecache/16999/__spark_libs__1960318546494038204.zip/slf4j-log4j12-1.7.16.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/data/yarn/nm/usercache/hadoop/filecache/16999/__spark_libs__1960318546494038204.zip/logback-classic-1.0.9.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/cloudera/parcels/CDH-5.14.2-1.cdh5.14.2.p0.3/jars/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
18/12/13 14:58:02 INFO SignalUtils: Registered signal handler for TERM
18/12/13 14:58:02 INFO SignalUtils: Registered signal handler for HUP
18/12/13 14:58:02 INFO SignalUtils: Registered signal handler for INT
Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/spark/network/util/ByteUnit : Unsupported major.minor version 52.0
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
	at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
	at org.apache.spark.internal.config.package$.<init>(package.scala:41)
	at org.apache.spark.internal.config.package$.<clinit>(package.scala)
	at org.apache.spark.deploy.yarn.ApplicationMaster.<init>(ApplicationMaster.scala:73)
	at org.apache.spark.deploy.yarn.ApplicationMaster$$anonfun$main$1.apply$mcV$sp(ApplicationMaster.scala:763)
	at org.apache.spark.deploy.SparkHadoopUtil$$anon$2.run(SparkHadoopUtil.scala:67)
	at org.apache.spark.deploy.SparkHadoopUtil$$anon$2.run(SparkHadoopUtil.scala:66)
	at java.security.AccessController.doPrivileged(Native Method)
	at javax.security.auth.Subject.doAs(Subject.java:415)
	at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1692)
	at org.apache.spark.deploy.SparkHadoopUtil.runAsSparkUser(SparkHadoopUtil.scala:66)
	at org.apache.spark.deploy.yarn.ApplicationMaster$.main(ApplicationMaster.scala:762)
	at org.apache.spark.deploy.yarn.ExecutorLauncher$.main(ApplicationMaster.scala:785)
	at org.apache.spark.deploy.yarn.ExecutorLauncher.main(ApplicationMaster.scala)

经过一番折腾后发现,是本地的jdk版本和服务器上的版本不一致。

### 回答1: 使用Scala编写Spark程序,可以将Hive数据批量导入HBase。具体步骤如下: 1. 在Scala引入相关的SparkHBase依赖库。 2. 创建SparkSession对象,并设置相关的配置参数。 3. 从Hive读取数据,可以使用Spark SQL或DataFrame API。 4. 将读取到的数据转换为HBase数据格式,例如使用HBase API的Put类。 5. 将转换后的数据写入HBase,可以使用HBase API的Table类。 6. 关闭SparkSession对象和HBase连接。 需要注意的是,导入HBase数据需要根据HBase表的结构进行转换,例如将Hive的列映射到HBase的列族和列。同时,需要根据实际情况设置HBase的配置参数,例如Zookeeper的地址和端口等。 ### 回答2: 要将Hive数据批量导入HBase,需要使用Scala编写Spark程序。具体步骤如下: 1. 配置HBaseHiveSpark的环境。在集群上安装好HBaseHiveSpark,并确保它们可以正常运行。 2. 创建一个Scala项目,并将所需的依赖项添加到项目。这些依赖项包括:HBase的Java API、Spark的Core API和Hive的JDBC驱动程序。可以在构建管理工具声明这些依赖项,如SBT或Maven。 3. 编写Spark程序。程序主要分为以下几个步骤: a. 从Hive读取数据。可以使用Hive的JDBC驱动程序连接到Hive,并执行SQL查询语句来读取数据。 b. 将数据转换为HBase Put对象。根据HBase数据模型,需要将每条数据转换为HBase的Put对象,包括Put对象的行键、列族、列名和值。 c. 将Put对象保存到HBase。使用HBase的Java API将转换后的Put对象批量保存到HBase。 4. 测试程序。可以在本地模式下运行程序,或者将程序部署到生产环境进行测试。 5. 部署程序。将打包好的程序部署到Spark集群,提交作业并监控作业的执行情况。 总之,将Hive数据批量导入HBase需要使用Scala编写Spark程序,并确保环境配置正确、依赖项已添加、程序编写正确、测试通过和部署正常。这项工作比较复杂,需要对HBaseHiveSpark有一定的了解和经验。 ### 回答3: Scala版本,SparkHive数据批量导入HBase,可以通过以下步骤实现。 1. 导入Hive表:首先需要在Hive创建表,并导入需要导入HBase数据。可以使用以下命令创建Hive表: CREATE EXTERNAL TABLE hive_table (key int, value string) STORED AS TEXTFILE LOCATION '/path/to/hive_table'; 2. 导入Spark:使用Spark SQL将Hive导入Spark。可以使用以下代码: val spark = SparkSession.builder().appName("HiveToHBase").enableHiveSupport().getOrCreate() val df = spark.sql("select * from hive_table") 3. 将数据转换成HBase的格式:将Spark数据转换成HBase的格式,并指定列族名。可以使用以下代码: import org.apache.hadoop.hbase.client.Put import org.apache.hadoop.hbase.util.Bytes val columnFamily = Bytes.toBytes("cf") val putRdd = df.rdd.map{row => val key = row.getInt(0) val value = row.getString(1) val put = new Put(Bytes.toBytes(key)) put.addColumn(columnFamily, Bytes.toBytes("col"), Bytes.toBytes(value)) (key, put) } 4. 保存到HBase:最后,将数据保存到HBase。可以使用以下代码: val tableName = "hbase_table" val config = HBaseConfiguration.create() config.set("hbase.zookeeper.quorum", "localhost") config.set("hbase.zookeeper.property.clientPort", "2181") val connection = ConnectionFactory.createConnection(config) val table = connection.getTable(TableName.valueOf(tableName)) putRdd.map{case (_, put) => put}.saveAsNewAPIHadoopDataset(createHadoopConf(tableName, config)) 5. 完成操作:完成所有操作后,关闭连接和SparkSession。可以使用以下代码: table.close() connection.close() spark.stop() 以上就是使用Scala版本的SparkHive数据批量导入HBase的详细步骤。需要注意的是,在实际操作需要根据具体情况进行适当调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值