1. 程式人生 > >IntelliJ IDEA構建基於maven的spark+hbase工程(scala語言)

IntelliJ IDEA構建基於maven的spark+hbase工程(scala語言)

摘要

利用IDEA來編寫基於maven的scala程式,主要功能用來支援從hbase中拉取資料供spark進行mapreduce運算。

軟體準備

不需要javaee支援的話,直接選擇Community版本就行了,畢竟免費,也足夠支援maven,scala,git,spark,hbase了。

安裝過程中選擇scala支援

安裝完成後,配置全域性的maven,指定自己安裝的maven也可以使用idea預設自帶maven。

工程構建

新建maven project,類似eclipse的simple project,不需要其他附屬,scala支援後續新增
新建maven

新工程刪除java資料夾,新建scala資料夾。

配置pom,因為需要編譯scala,所以plugin選擇maven-scala-plugin

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>com.test</groupId> <artifactId>LdSparkHbase</artifactId> <version>1.0-SNAPSHOT</version> <properties> <jdk.version>1.8</jdk.version> <logback.version>
1.1.2</logback.version> <slf4j.version>1.7.7</slf4j.version> <junit.version>4.11</junit.version> <spark.version>2.1.0</spark.version> <hadoop.version>2.6.5</hadoop.version> <hbase.version>1.2.6</hbase.version> </properties> <dependencies> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_2.10</artifactId> <version>${spark.version}</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-client</artifactId> <version>${hadoop.version}</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>${hadoop.version}</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-hdfs</artifactId> <version>${hadoop.version}</version> </dependency> <dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-client</artifactId> <version>${hbase.version}</version> </dependency> <dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-server</artifactId> <version>${hbase.version}</version> </dependency> <dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase</artifactId> <version>${hbase.version}</version> <type>pom</type> </dependency> </dependencies> <build> <sourceDirectory>src/main/scala</sourceDirectory> <plugins> <plugin> <groupId>org.scala-tools</groupId> <artifactId>maven-scala-plugin</artifactId> <version>2.15.2</version> <executions> <execution> <goals> <goal>compile</goal> <goal>testCompile</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.1.0</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <createDependencyReducedPom>false</createDependencyReducedPom> <filters> <filter> <artifact>*:*</artifact> <excludes> <exclude>META-INF/*.SF</exclude> <exclude>META-INF/*.DSA</exclude> <exclude>META-INF/*.RSA</exclude> </excludes> </filter> </filters> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>com.test.SparkCount</mainClass> </transformer> </transformers> </configuration> </execution> </executions> </plugin> </plugins> </build> </project>

工程右鍵,選擇add framwork support,在開啟的選項中新增scala支援
這裡寫圖片描述

先看看工程能不能用,建議新建一個hello work類,run一下,看看工程構建是否正常。

新建SparkCount類,這裡遍歷採用官方demo,mapreduce自己修改

SparkCount

package com.test

import org.apache.hadoop.hbase.{HBaseConfiguration, HTableDescriptor, TableName}
import org.apache.hadoop.hbase.client.HBaseAdmin
import org.apache.hadoop.hbase.mapreduce.TableInputFormat
import org.apache.spark._
import org.apache.hadoop.hbase.client.HTable
import org.apache.hadoop.hbase.client.Put
import org.apache.hadoop.hbase.util.Bytes
import org.apache.hadoop.hbase.io.ImmutableBytesWritable
import org.apache.hadoop.hbase.mapreduce.TableOutputFormat
import org.apache.hadoop.mapred.JobConf
import org.apache.hadoop.io._

object SparkCount {
  def main(args: Array[String]): Unit = {
    val sparkConf = new SparkConf().setMaster("spark://testserverip:7077")
      .setAppName("reduce")
    val sc = new SparkContext(sparkConf)

    val tablename = "apos_status"
    val conf = HBaseConfiguration.create()
    //設定zooKeeper叢集地址,也可以通過將hbase-site.xml匯入classpath,但是建議在程式裡這樣設定
    conf.set("hbase.zookeeper.quorum", "localhost")
    //設定zookeeper連線埠,預設2181
    conf.set("hbase.zookeeper.property.clientPort", "2181")
    conf.set(TableInputFormat.INPUT_TABLE, tablename)
    conf.set(TableInputFormat.SCAN_COLUMNS, "apos:type")


    //讀取資料並轉化成rdd
    val hBaseRDD = sc.newAPIHadoopRDD(conf, classOf[TableInputFormat],
      classOf[org.apache.hadoop.hbase.io.ImmutableBytesWritable],
      classOf[org.apache.hadoop.hbase.client.Result])

    val count = hBaseRDD.count()
    println(count)
    hBaseRDD.foreach { case (_, result) => {
      //獲取行鍵
      val key = Bytes.toString(result.getRow)
      //通過列族和列名獲取列
      val typenames = Bytes.toString(result.getValue("apos".getBytes, "type".getBytes))
      if (key != null && typenames != null) {
        println(key + ":" + typenames);
      }

    }
    }
    println("map begin");
    val result = hBaseRDD.map(tuple=>Bytes.toString(tuple._2.getValue("apos".getBytes, "type".getBytes))).map(s=>(s,1)).reduceByKey((a,b)=>a+b)
    println("map end");

//最終結果寫入hdfs,也可以寫入hbase   result.saveAsTextFile("hdfs://localhost:9070/user/root/aposStatus-out")

//也可以選擇寫入hbase,寫入配置
    var resultConf = HBaseConfiguration.create()
    //設定zooKeeper叢集地址,也可以通過將hbase-site.xml匯入classpath,但是建議在程式裡這樣設定
    resultConf.set("hbase.zookeeper.quorum", "localhost")
    //設定zookeeper連線埠,預設2181
    resultConf.set("hbase.zookeeper.property.clientPort", "2181")
    //注意這裡是output
    resultConf.set(TableOutputFormat.OUTPUT_TABLE, "count-result")
    var job = Job.getInstance(resultConf)
    job.setOutputKeyClass(classOf[ImmutableBytesWritable])
    job.setOutputValueClass(classOf[org.apache.hadoop.hbase.client.Result])
    job.setOutputFormatClass(classOf[TableOutputFormat[ImmutableBytesWritable]])
    val hbaseOut = result.map(tuple=>{
      val put = new Put(Bytes.toBytes(UUID.randomUUID().toString))
      put.addColumn(Bytes.toBytes("result"), Bytes.toBytes("type"), Bytes.toBytes(tuple._1))
      //直接寫入整型會以十六進位制儲存
      put.addColumn(Bytes.toBytes("result"), Bytes.toBytes("count"), Bytes.toBytes(tuple._2+""))
      (new ImmutableBytesWritable, put)
    })
    hbaseOut.saveAsNewAPIHadoopDataset(job.getConfiguration)
    sc.stop()

  }

}

打包執行

打包工程

如果沒有顯示maven projects導航欄,可以直接搜尋
這裡寫圖片描述
雙擊構建,也可右鍵選擇構建
這裡寫圖片描述
構建成功,上傳到伺服器執行測試
這裡寫圖片描述

運算結果

hdfs結果
count,foreach,mapreduce三個操作合計
操作用時

相關推薦

IntelliJ IDEA構建基於maven的spark+hbase工程scala語言

摘要 利用IDEA來編寫基於maven的scala程式,主要功能用來支援從hbase中拉取資料供spark進行mapreduce運算。 軟體準備 不需要javaee支援的話,直接選擇Community版本就行了,畢竟免費,也足夠支援maven,sc

IntelliJ IDEA 構建maven多模組工程專案(詳細多圖)

食用前須知 本文以a b c 三個模組為例來搭建專案,以達到通俗易懂的初衷 模組a —– 基模組,就是人們常說的parent 模組b —– 其他模組都需要使用的一些工具,比如時間工具,json工具等 模組c —– 專案主要的內容,一般為

使用Intellij中的Spring Initializr來快速構建Spring Boot/Cloud工程十五

在之前的所有Spring Boot和Spring Cloud相關博文中,都會涉及Spring Boot工程的建立。而建立的方式多種多樣,我們可以通過Maven來手工構建或是通過腳手架等方式快速搭建,也可以通過《Spring Boot快速入門》一文中提到的SPRING INITIALIZR頁面工具來建立,相信每

intellij idea 構建 基於spring springmvc hibernate的maven專案《一》

下載軟體環境暫且不提 基本步驟如下 1.在intellij idea中建立project 填寫工程名,包名 下面一直next知道finish。這樣一個工程就建立了。 剛建立的工程目錄結構如下 2.點選工程右鍵 Add Frameworks Support按如下選擇sp

IntelliJ IDEA 創建Web項目全教程

指定路徑 output orm ans pro 32位 clas http mat 說明:IntelliJ IDEA 版本為14.JDK 版本為1.7tomcat 版本為apache-tomcat-7.0.70註:在創建過程中註意相關軟件版本位數的問題。32位,64位的軟件

IntelliJ IDEA 2018安裝+啟用+漢化詳細圖解

1、IntelliJ IDEA 2018 官方下載地址:點選開啟連結,說明一下idea分為兩種版本社群版和商業版,商業版付費的功能多,社群版功能少免費。 2、安裝步驟如下圖: 執行”IntelliJ IDEA 2018.1.exe“ 開始安裝,點選next  選

IntelliJ IDEA-2018.2新增Log4j日誌 十九

1> 在Project Structure 下找到Dependencies下新增依賴包 2>選擇Project Structure下ME模組,新增資料夾resources 3>再選中資料夾轉換成資原始檔夾Resources   4&g

IntelliJ IDEA自動匯入包去除星號import xxx.*

開啟設定>Editor>Code Style>Java>Scheme Default>Imports ① 將Class count to use import with "*"改為99(匯入同一個包的類超過這個數值自動變為 * ) ② 將Names count to us

IntelliJ IDEA一些好用的功能持續更新

Override Method 有時候想要重寫父類的方法,尤其是一些不是自己寫的父類,懶得找父類是什麼樣的,比如有什麼引數。這時候只要用快捷鍵點出Override Method就可以直接在下拉框中選擇想要重寫的方法,系統自動彈出該方法並且加上@Override

Intellij IDEA建立基於Gradle的SpringMVC工程

在建立工程時選擇基於Gradle的工程,勾選Web 如果選擇使用gradle wrapper導致下載很慢,可以選擇本地安裝的gradle 新增tomcat(Run->Edit Configuration),最後點選綠三角執行工程 在build.gradle中新

IntelliJ IDEA 中建立普通web工程並執行非maven工程

安裝工具 1、JDK7+ 2、IntelliJ Idea 工具(下載安裝後,網上找註冊碼破解即可) 3、tomcat7+ 解壓縮版 明確兩個概念: 1、Project:類似於eclipse的workspace概念 2、Module:類似於eclipse的工

IntelliJ IDEA構建多Module的maven工程

建立父工程,點選File—>new —>Project 選擇Maven,不要勾選Create from archetype 點選Next,填寫GroupId和ArtifactId 點選Next,給工程起名並選擇儲存位置,這裡就用預設的了 點選Fin

如何使用IntelliJ IDEA 建立基於Maven構建的Web專案的過程

環境配置: IntelliJ IDEA 12.1.4 JDK 1.6.0_51 Maven 3.0.4 詳細步驟: 如果是第一次開啟軟體直接點選 Create New Project ,如果之前已經開啟過專案了,需要點選選單中 File → New Project

十三、IntelliJ IDEA 中的版本控制介紹

點擊 遠程 analysis 介紹 rem 相關 目錄 IT 默認 我們已經簡單了解了 IntelliJ IDEA 的版本控制機制,那麽接下來,就讓我們一起看看在 IntelliJ IDEA 中進行具體的版本控制操作。 標註1:Checkout from Version

intellij idea 官方幫助文檔翻譯安裝

5G cati 歡迎界面 www. 1.8 一點 過去的 方便 使用 安裝需求:   硬件需求:     最低2GB內存,推薦4GB內存     最少要有1.5GB的硬盤空間,以及1GB空間用於緩存     最低1024*768的分辨率   軟件需求:     

Intellij IDEA構建maven專案時src下沒有java和resources資料夾

最近從eclipse轉IDEA,中間遇到了很多問題,昨天用IDEA構建maven專案,發現src下只有webapp目錄java和resources沒有顯示查閱好多資料,今天才算弄明白,整理了一下,歡迎指

sbt構建一個spark工程scala+spark+sbt

準備工作,檔案結構如下: (python2.7) [email protected]:~/Desktop/WordCount$ tree . ├── build.sbt ├── src │        └── main │                   

【SSH實戰】IntelliJ IDEA環境開發BOS物流專案環境搭建

一、專案概述二、搭建專案開發環境(一)資料庫環境/*建立一個數據庫*/ CREATE DATABASE bos CHARACTER SET utf8; /*建立一個新使用者*/ CREATE USER lee IDENTIFIED BY 'root'; /*對新使用者進行授權

從零構建基於以太坊Ethereum錢包Parity聯盟鏈

什麼情況下可以建立自己測試用的PoA chain? 公司內網或無對外網路,無法同步區塊 降低測試時等待區塊的時間 不想碰到testrpc各種雷 PoA Chain特點有 有別於PoW(Proof-of-Work)需要解數學難題來產生

IntelliJ IDEA 報錯及解決方法1

問題一:“錯誤: 找不到或無法載入主類 Main”解決方法:工具欄右上-點選Edit Configurations-將Main class中的名字修改為自己程式中的class名。 問題二:“Error:(6, 8) java: 類_02是公共的, 應在名為 _02.java