Utilisation d'un UDF Hive

Pour exécuter chaque job basé sur UDF Hive, vous pouvez soit exécuter ces étapes individuellement sur votre client Hive au cours d'une seule session, soit créer un fichier HQL compilant de manière séquentielle toutes les étapes requises et l'exécuter en une fois.

  1. Dans votre client Hive, connectez-vous à la base de données Hive requise.
  2. Enregistrez le fichier JAR du module SDK qualité des Big Data donné auquel appartient l'UDF Hive Data Quality souhaité.
  3. En cas d'UDAF Validate Address, pour définir le chemin d’accès aux bibliothèques COBOL, définissez la variable d’environnement LD_LIBRARY_PATH comme suit :
    set mapreduce.admin.user.env = LD_LIBRARY_PATH=/home/hduser/~/runtime/lib:
    /home/hduser/~/runtime/bin:/home/hduser/~/server/modules/universaladdress/lib, ACU_RUNCBL_JNI_ONLOAD_DISABLE=1, G1RTS=/home/hduser/~/ ;
  4. En cas d'UDAF Validate Address Global, ajoutez également le fichier libAddressDoctor5.so.
  5. En cas d'UDAF Validate Address Loqate, ajoutez ces fichiers requis au cache distribué.
    • loqate-core.car
    • LoqateVerificationLevel.csv
    • Loqate.csv
    • countryTables.csv
    • countryNameTables.csv
  6. Créez un alias pour l'UDF Hive du job Data Quality que vous souhaitez lancer.
    Par exemple :
    CREATE TEMPORARY FUNCTION matchkeygenerator as 'com.pb.bdq.amm.process.hive.matchkeygenerator.MatchKeyGeneratorUDF';
  7. Indiquez les configurations telles que la règle de rapprochement, le champ de tri, la colonne Express Match et d'autres détails pour le job et affectez-les aux propriétés de configuration ou de variable respectives.
    Remarque : La règle doit être au format JSON.

    Par exemple :

    set rule='{"matchKeys":[{"expressMatchKey":false, "matchKeyField":"MatchKey1",
    "rules":[{"algorithm":"Soundex"," field":"businessname", "startPosition":1, "length":0,"active":true, "sortInput":null, "removeNoiseCharacters":false}]}, 
    {"expressMatchKey":false, "matchKeyField":"MatchKey2", "rules":[{"algorithm":"Koeln", "field":"businessname", "startPosition":1, "length":0, "active":true, "sortInput":null, "removeNoiseCharacters":false}]}]}';
    Remarque : Assurez-vous d'utiliser les propriétés de configuration dans les configurations de job respectives. Par exemple, pb.bdq.match.rule, pb.bdq.match.express.column, pb.bdq.consolidation.sort.field et ainsi de suite, là où cela est indiqué dans les échantillons de fichiers HQL respectifs.
  8. Spécifiez les champs d'en-tête de la table d'entrée au format séparé par des virgules et assignez-les à une propriété de configuration ou de variable.
    set pb.bdq.match.header='businessname,recordid';
    Remarque : Veillez à utiliser la propriété de configuration, le cas échéant. Par exemple, pb.bdq.match.header, pb.bdq.consolidation.header et ainsi de suite, là où cela est indiqué dans les échantillons de fichiers HQL respectifs.
  9. Désactivez l’agrégation de données entre Reducer et Mapper en définissant la configuration de la variable d'environnement Hive.Map.Aggr sur false, comme indiqué dans l’exemple ci-dessous :
    set hive.map.aggr = false;
    Remarque : Cette configuration est obligatoire pour tous les UDAF.
  10. Définissez les configurations générales pour l'exécution du job, comme indiqué dans l’exemple ci-dessous :
    set pb.bdq.uam.universaladdress.general.configuration = {"dFileType":"SPLIT", "dMemoryModel":"MEDIUM", "lacsLinkMemoryModel":"MEDIUM", "suiteLinkMemoryModel":"MEDIUM"};
    Remarque : Cette configuration est requise uniquement pour les UDAF Hive du module Universal Addressing.
  11. Définissez les configurations d'entrée pour l'exécution du job, comme indiqué dans l’exemple ci-dessous :
    set pb.bdq.uam.universaladdress.input.configuration = {"outputStandardAddress":true, "outputPostalData":false, "outputParsedInput":false, "outputAddressBlocks":true, "performUSProcessing":true, "performCanadianProcessing":false, "performInternationalProcessing":false, "outputFormattedOnFail":false, "outputCasing":"MIXED", "outputPostalCodeSeparator":true, "outputMultinationalCharacters":false, "performDPV":false, "performRDI":false, "performESM":false, "performASM":false, "performEWS":false, "performLACSLink":false, "performLOT":false, "failOnCMRAMatch":false, "extractFirm":false, "extractUrb":false, "outputReport3553":false, "outputReportSERP":false, "outputReportSummary":true, "outputCASSDetail":false, "outputFieldLevelReturnCodes":false, "keepMultimatch":false, "maximumResults":10, "standardAddressFormat":"STANDARD_ADDRESS_FORMAT_COMBINED_UNIT", "standardAddressPMBLine":"STANDARD_ADDRESS_PMB_LINE_NONE", "cityNameFormat":"CITY_FORMAT_STANDARD", "vanityCityFormatLong":true, "outputCountryFormat":"ENGLISH", "homeCountry":"United States", "streetMatchingStrictness":"MATCHING_STRICTNESS_MEDIUM", "firmMatchingStrictness":"MATCHING_STRICTNESS_MEDIUM", "directionalMatchingStrictness":"MATCHING_STRICTNESS_MEDIUM", "dualAddressLogic":"DUAL_NORMAL", "dpvSuccessfulStatusCondition":"A", "reportListFileName":"", "reportlistProcessorName":"", "reportlistNumber":1, "reportMailerAddress":"", "reportMailerName":"", "reportMailerCityLine":"", "canReportMailerCPCNumber":"", "canReportMailerAddress":"", "canReportMailerName":"", "canReportMailerCityLine":"", "internationalCityStreetSearching":100, "addressLineSearchOnFail":true, "outputStreetAlias":true, "outputVeriMoveBlock":false, "dpvDetermineNoStat":false, "dpvDetermineVacancy":false, "outputAbbreviatedAlias":false, "outputPreferredAlias":false, "outputPreferredCity":"CITY_OVERRIDE_NAME_ZIP4", "performSuiteLink":false, "suppressZplusPhantomCarrierR777":false, "canStandardAddressFormat":"D", "canEnglishApartmentLabel":"APT", "canFrenchApartmentLabel":"APP", "canFrenchFormat":"C", "canOutputCityFormat":"D", "canOutputCityAlias":true, "canDualAddressLogic":"D", "canPreferHouseNum":false, "canSSLVRFLG":false, "canRuralRouteFormat":"A", "canNonCivicFormat":"A", "canDeliveryOfficeFormat":"I", "canEnableSERP":false, "canSwitchManagedPostalCodeConfidence":false, "stats":null, "counts":null, "z3seg":null, "serpStats":null, "dpvSeedList":null, "lacsSeedList":null, "zipInputSet":null, "reportName":null, "currentUser":null, "jobName":null, "jobId":null, "jobRequest":false, "properties":{"DPVDetermineVacancy":"N", "DualAddressLogic":"N", "ExtractUrb":"N", "CanFrenchFormat":"C", "AddressLineSearchOnFail":"Y", "OutputFieldLevelReturnCodes":"N", "OutputFormattedOnFail":"N", "OutputStreetNameAlias":"Y", "OutputReportSERP":"N", "OutputAddressBlocks":"Y", "ExtractFirm":"N", "CanEnglishApartmentLabel":"APT", "OutputPreferredCity":"Z", "FirmMatchingStrictness":"M", "CanFrenchApartmentLabel":"APP", "KeepMultimatch":"N", "StandardAddressPMBLine":"N", "PerformSuiteLink":"N", "CanStandardAddressFormat":"D", "DPVSuccessfulStatusCondition":"A", "PerformLACSLink":"N", "PerformUSProcessing":"Y", "PerformEWS":"N", "StandardAddressFormat":"C", "SuppressZplusPhantomCarrierR777":"N", "HomeCountry":"United States", "ReportMailerAddress":"", "OutputReport3553":"N", "OutputVeriMoveDataBlock":"N", "CanDeliveryOfficeFormat":"I", "OutputAbbreviatedAlias":"N", "PerformCanadianProcessing":"N", "PerformDPV":"N", "PerformInternationalProcessing":"N", "CanSSLVRFlg":"N", "StreetMatchingStrictness":"M", "InternationalCityStreetSearching":"100", "canSwitchManagedPostalCodeConfidence":"N", "CanDualAddressLogic":"D", "PerformASM":"N", "OutputCasing":"M", "ReportListFileName":"", "CanReportMailerAddress":"", "ReportMailerCityLine":"", "CanReportMailerCPCNumber":"", "ReportListProcessorName":"", "CanOutputCityAlias":"Y", "DirectionalMatchingStrictness":"M", "CanRuralRouteFormat":"A", "CanOutputCityFormat":"D", "ReportListNumber":"1", "CanReportMailerCityLine":"", "OutputMultinationalCharacters":"N", "EnableSERP":"N", "CanNonCivicFormat":"A", "OutputShortCityName":"S", "OutputPostalCodeSeparator":"Y", "FailOnCMRAMatch":"N", "PerformLOT":"N", "OutputCountryFormat":"E", "CanPreferHouseNum":"N", "CanReportMailerName":"", "PerformRDI":"N", "ReportMailerName":"", "PerformESM":"N", "OutputReportSummary":"Y", "OutputVanityCityFormatLong":"Y", "OutputPreferredAlias":"N", "DPVDetermineNoStat":"N", "MaximumResults":"10"}}};
    Remarque : Cette configuration est requise uniquement pour les UDAF Hive du module Universal Addressing.
  12. Définissez les configurations de moteur pour l'exécution du job, comme indiqué dans l’exemple ci-dessous :
    set pb.bdq.uam.universaladdress.engine.configurations = { "referenceData":{ "dataDir":"/home/hduser/resources/uam/universaladdress/UAM_universaladdress4.0_Feb15/", "referenceDataPathLocation":"LocaltoDataNodes"}, "cobolRuntimePath":"/home/hduser/tapan/addressquality/", "modulesDir":"/home/hduser/tapan/addressquality/modules", "dpvDbPath":null, "suiteLinkDBPath":null, "ewsDBPath":null, "rdiDBPath":null, "lacsDBPath":null};
    Remarque : Cette configuration est requise uniquement pour les UDAF Hive du module Universal Addressing.
  13. Définissez le type de processus pour indiquer le niveau de validation souhaité. Actuellement, nous prenons en charge uniquement la validation d'adresse.
    Par exemple, dans le job Validate Address, définissez le type de processus comme suit :
    set pb.bdq.uam.universaladdress.process.type=VALIDATE; 
    Remarque : Cette configuration est requise uniquement pour les UDAF Hive Validate Address et Validate Address Loqate.
  14. Pour exécuter le job et afficher la sortie du job sur la console, écrivez la requête, comme indiqué dans l'exemple ci-dessous :
    SELECT businessname, recordid, bar.ret["MatchKey1"] AS MatchKey1, bar.ret["MatchKey2"] AS MatchKey2 FROM (
    SELECT *, matchkeygenerator (${hiveconf:rule}, ${hiveconf:header}, businessname, recordid) AS ret FROM cust ) bar;
    Pour exécuter le job et placer la sortie du job dans un fichier donné, écrivez la requête, comme indiqué dans l'exemple ci-dessous :
    INSERT OVERWRITE LOCAL DIRECTORY '/home/hadoop/MatchKey/' row format delimited FIELDS TERMINATED BY ',' MAP FIELDS TERMINATED BY ':' COLLECTION ITEMS TERMINATED BY '|' LINES TERMINATED BY '\n' STORED AS TEXTFILE 
    SELECT businessname, recordid, bar.ret["MatchKey1"] AS MatchKey1, bar.ret["MatchKey2"] AS MatchKey2 FROM (
    SELECT *, matchkeygenerator (${hiveconf:rule}, ${hiveconf:header}, businessname, recordid) AS ret FROM cust ) bar;
    Remarque : Veillez à utiliser l'alias précédemment définie pour l'UDF.
Important : Pour tous les jobs UDAF, utilisez les propriétés de configuration respectives sous forme de variables lors de la définition des paramètres d’entrée, là où cela est indiqué dans les exemples de fichier HQL respectifs.

Par exemple, pb.bdq.match.rule, pb.bdq.match.express.column, pb.bdq.consolidation.sort.field et ainsi de suite.