hadoop 透過cachefile來避免資料傾斜
package hello_hadoop; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URI; import java.net.URISyntaxException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.filecache.DistributedCache; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Job; import org.apache.hadoop.mapreduce.Mapper; import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; import org.apache.hadoop.mapreduce.lib.input.FileSplit; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; public class GetFileName { //得到處理的檔名,以及將需要的檔案快取到相應的節點 private final static Log LOG = LogFactory.getLog(GetFileName.class); public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException, URISyntaxException { LOG.info("Go into the main method ......"); Configuration conf = new Configuration(); Job job = Job.getInstance(conf); job.setJarByClass(GetFileName.class); job.setMapOutputKeyClass(Text.class); job.setMapOutputValueClass(Text.class); job.setMapperClass(GetFileNameMapper.class); job.setNumReduceTasks(0); //叢集上新增DistributedCache data134:9000namenode的描述 #thelinkofthefile改檔案的連結,下面讀取的時候需要使用 job.addCacheFile(new URI("hdfs://data134:9000/home/tmp.txt#thelinkofthefile")); FileInputFormat.addInputPath(job, new Path(args[0])); FileOutputFormat.setOutputPath(job, new Path(args[1])); boolean test = job.waitForCompletion(true); LOG.info("End the main method ......"); System.exit(test?0:1); } } class GetFileNameMapper extends Mapper<LongWritable, Text, Text, Text>{ private final Log LOG = LogFactory.getLog(GetFileNameMapper.class); @Override protected void setup(Mapper<LongWritable, Text, Text, Text>.Context context) throws IOException, InterruptedException { if(context.getCacheFiles().length>0); URI u = context.getCacheFiles()[0]; //這裡使用連結來訪問檔案 BufferedReader br = new BufferedReader( new FileReader(new File("./thelinkofthefile"))); String line = br.readLine(); context.write(new Text(line), new Text()); System.out.println("Here I read Line :"+line); } @Override protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, Text>.Context context) throws IOException, InterruptedException { } }
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31506529/viewspace-2213417/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Hive資料傾斜Hive
- 淺析 Hadoop 中的資料傾斜(R0.1)Hadoop
- Spark學習——資料傾斜Spark
- 資料傾斜解決辦法
- IoT資料傾斜如何解決
- Spark 資料傾斜及其解決方案Spark
- hive優化-資料傾斜優化Hive優化
- 大資料常見問題之資料傾斜大資料
- Hive千億級資料傾斜解決方案Hive
- 【Hive】資料傾斜優化 shuffle, join, group byHive優化
- Redis 切片叢集的資料傾斜分析Redis
- PostgreSQL DBA(193) - 資料傾斜下的HashJoinSQL
- 【Spark篇】---Spark解決資料傾斜問題Spark
- 大資料SQL優化之資料傾斜解決案例全集大資料SQL優化
- Spark效能最佳化篇三:資料傾斜調優Spark
- 如何解決 Redis 資料傾斜、熱點等問題Redis
- Oracle中利用函式索引處理資料傾斜案例Oracle函式索引
- 巧用函式索引解決資料傾斜列查詢函式索引
- 實戰 | Hive 資料傾斜問題定位排查及解決Hive
- 一種自平衡解決資料傾斜的分表方法
- Cesium傾斜模型單體化模型
- Oracle資料傾斜導致的問題-有繫結變數Oracle變數
- Oracle資料傾斜導致的問題-無繫結變數Oracle變數
- Redis 資料傾斜與 JD 開源 hotkey 原始碼分析揭秘Redis原始碼
- 如何解決Hive中經常出現的資料傾斜問題Hive
- salesforce零基礎學習(九十九)Salesforce Data Skew(資料傾斜)Salesforce
- css具有傾斜效果的橫條CSS
- 五款傾斜攝影與三維資料處理工具介紹:GISBox、Cesiumlab、OSGBLab、靈易智模、傾斜伴侶
- Spark SQL三種join和資料傾斜的產生和解決辦法SparkSQL
- 資料安全:透過資料雲備份來抵禦勒索病毒
- CLUSTERING_FACTOR、回表、資料分佈傾斜走全表還是索引索引
- 傾斜單體化模型技術實現模型
- 傾斜攝影測量知識基礎
- CSS3 skew傾斜、rotate旋轉動畫CSSS3動畫
- PIoU Loss:傾斜目標檢測專用損失函式,公開超難傾斜目標資料集Retail50K | ECCV 2020 Spotlight函式AI
- Oracle面對“資料傾斜列使用繫結變數”場景的解決方案Oracle變數
- 編號函式 自定義函式 集合型別 表的優化 資料傾斜函式型別優化
- 為什麼要透過API介面來獲取資料API